cookie和session的代码实现

 1、设置cookie

  今天笔试题考的是cookie的设置,我竟然选了request也可以设置cookie,我的天呀。

  我们来看如何在response设置吧

public void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{Cookie c = new Cookie("name","jenkins");resp.addCookie(c);} 

  这样子设置,实际上是在返回的消息头中加了一个key-value,key为Set-Cookie,value也是key-value的形式,上面的就是:name=jenkins,多个cookie用分号(;)隔开

  消息头中的样式是:Set-Cookie:name=jenkins;JSESSIONID=ERERE23343423

  其实如果要在request中把cookie返回到服务器端,我们可以在请求的消息头中加一个值:

package servletbase;import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;public class MyServlet01 extends HttpServlet{public void postCookieToServer(){HttpClient client = new HttpClient();List<Header> headers = new ArrayList<Header>();//把key为JSESSIONID的cookie上传到服务器,服务器会根据这个id来判断//发起该会话的用户是不是之前登录过,做鉴权headers.add(new Header("cookie","JSESSIONID=RERER3"));//设置消息头client.getHostConfiguration().getParams().setParameter("http.default-headers", headers);}}

2、查询Cookie

  在请求对象中获取:

public void getCookieFromRequest(HttpServletRequest request){//获取cookie数组Cookie[] cookies = request.getCookies();for(Cookie cookie:cookies){//获取cookie的key-valueString name = cookie.getName();String value = cookie.getValue();}}

3、修改Cookie 

public void updateCookieFromRequest(HttpServletRequest request,HttpServletResponse response){//获取cookie数组Cookie[] cookies = request.getCookies();for(Cookie cookie:cookies){//修改cookie的valueString name = cookie.getName();if(name.equals("city")){cookie.setValue("guangzhou");response.addCookie(cookie);}}}

4、Cookie的编解码(value为中文时需要编码,否则访问时会报错)

     //编码Cookie c = new Cookie("city",URLEncoder.encode("广州","utf-8"));//解码String value = c.getValue();value = URLDecoder.decode(value,"utf-8");

5、Cookie的其他方法

//设置生存时间,单位是秒,默认小于零,保存在内存中。等于零是即刻删除
cookie.setMaxAge(30)//设置路径,浏览器访问服务器时只向cookie路径或者子路径发送cookie,以下访问/web/index.html是会发cookie,但访问/myweb/index.html就不会了
cookie.setPath("/web");

6、Cookie的限制

  a、可以被用户限制

  b、保存在浏览器,不安全,敏感数据要进行加密

  c、只能保存少量数据,大约4k左右

  d、个数有限制

  e、只能保存字符串

7、Session定义和工作原理

  简单来说Session就是服务器为每一个访问的浏览器分配的内存空间,它有一个唯一的id,并且会将这个jsessionid以cookie的形式发送到浏览器(服务器调用了getSession()方法才会返回jsessionid到浏览器,并不是每个请求过来都返回),浏览器再次访问时就会把这个jsessionid发送到服务器,服务器就能找到session对象。

  如果浏览器再次访问(请求消息头中带有jessionid)时,服务器能找到对应的sessionid,则服务器不再返回sessionid到浏览器。

8、获取Session 

//参数为true时一定会返回session对象
HttpSession session = request.getSession(true);
//不加参数默认是true
HttpSession session = request.getSession();//参数为false时,则没有sessionid时返回null
//有sessionid,但找不到session对象时也返回null,能找到session对象就返回该对象
HttpSession session = request.getSession(false);

9、使用Session绑定对象

1
2
3
4
5
6
7
8
9
//绑定对象
void session.setAttribute(String name,Object boj);
//获取绑定对象
Object session.getAttribute(String name);
//移除绑定对象
void session.removeAttribute(String name);
//删除session对象
session.invalidate();

10、Session超时

服务器会将空闲时间过长的session对象删除以节省内存空间资源,一般是30分钟 

在tomcat的conf/web.xml文件夹设置(单位是分钟):

  <session-config>

    <session-timeout>30</session-timeout>

  </session-config>

通过编程修改:

  void session.setMaxInactiveInterval(int seconds)

11、浏览器禁用cookie后果及解决方法

  浏览器禁用cookie后,session就不能用了,因为jsessionid不能在浏览器保存。

  解决办法:使用URL重写方法解决,就是在重定向时在url中加sessionid参数,就不需要浏览器保存了。看以下的例子,假如登录验证过程了,需要重定向到首页 

if(name.equals("admin") && pwd.equals("admin")){session.setAttribute("name",name);//重定向到首页//response.sendRedirect("index.jsp");//改为,其会在路径后面加上jsessionid,//System.out.println("url:" + resp.encodeRedirectURL("index.html")); --> url:index.html;jsessionid=4E885D5D87247441F761C96ACA9A7B68response.sendRedirect( response.encodeRedirectURL("index.jsp"));              }

  登录之后我们就可以把sessionid保存到页面,访问时把它带上就好了,可以在url后面加上sessionid,如下:

  localhost:8080/testweb/servlet01;jsessionid=4E885D5D87247441F761C96ACA9A7B68

  另外如果在服务器端没有生成session对象,服务器是不会返回sessionid的cookie到浏览器的,即在服务器端要调用request.getSession()

12、Session的优缺点

  优点:

  a、安全(状态保存在服务器端)

  b、能保存的数据类型更多,cookie只能是字符串

  c、能保存更多数据

  缺点:

  session将状态保存在服务器端,占用服务器内存,当用户量过大时,会严重影响服务器性能。

转载于:https://www.cnblogs.com/baojiao/p/6007123.html

cookie和session的代码实现相关推荐

  1. cookie代码加时间多久出现一次_一文彻底搞懂Cookie、Session、Token到底是什么

    前言 在了解这三个概念之前我们先要了解HTTP是无状态的Web服务器,什么是无状态呢?就像上面夏洛特烦恼中经典的一幕对话一样,一次对话完成后下一次对话完全不知道上一次对话发生了什么.如果在Web服务器 ...

  2. 你想了解的Cookie和Session就在这~

    目录 1.会话的概念 2.保存会话的两种技术 3.Cookie 4.Session(重点) 1.会话的概念 我们知道session的意思就是会话,Cookie和Session 是两种会话技术,我们首先 ...

  3. Cookie和Session的区别与联系

    Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Session的实现原理(重点) Session常用方法: Cookie 基本介绍 经典案例 ...

  4. web存储中cookie、session区别

    http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的.为了使得web能够产生一些动态信息,就需要保存"状态",而cookie和session机制就是为了解决http ...

  5. 关于cookie的文章(cookie与session机制)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  6. cookie 和 session 机制

    cookie机制 Cookie实际上是Web服务端与客户端(典型的是浏览器)交互时彼此传递的一部分内容,内容可以是任意的,但要在允许的长度范围之内.客户端会将它保存在本地机器上(如IE便会保存在本地的 ...

  7. Servlet学习DAY_02:重定向/ 文件上传/ Cookie和Session/ 导入一个工程 / 配置欢迎页面 / 同步请求和异步请求/JSON和AJax介绍 /过滤器

    重定向 重定向是服务器告诉客户端往指定的路径再次发出请求的指令 执行过程: 当服务器执行重定向方法时会给客户端返回302状态码和一个请求路径,浏览器接收到302后会立即往指定的路径再次发出请求 res ...

  8. cookie和session的理解

    一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet )调用HttpServletRequest.getSession(true) ...

  9. Cookie与 Session使用详解

    1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...

最新文章

  1. 保护模式下GDTR,LDTR,全局描述符表,局部描述符表和选择器的关系
  2. 在其他数都出现偶数次的数组中找到出现奇数次的数
  3. PHP开发环境MAMP for Windows
  4. 如何学习机器学习、看待算法竞赛?粉丝精选留言
  5. 迫不及待,英特尔推特“官宣”GPU发布时间
  6. linux mysql web界面吗_Linux下安装MySQL Web 管理工具phpMyAdmin
  7. Python字符串有关的方法汇总
  8. antd 表格树如何展开_React Ant Design树形表格的复杂增删改
  9. Wireshark系列之7 利用WinHex还原文件
  10. hping3 使用 (构造dos攻击)
  11. 谷歌强烈推荐!浏览器助手,让你的浏览器至少提升10个档次!
  12. Web后端的基础知识
  13. java中var是什么意思_Java 10中的var是什么?
  14. 【韵律迁移】Robust and fine-grained prosody control of end-to-end speech synthesis
  15. python 中搞错工作路径的意思导致的相对路径产生bug:[Errno 2] No such file or directory:
  16. 用Python告诉你深圳房租有多高
  17. 旧电脑怎么升级到新版Win10
  18. 微信小程序一个按钮同时获取用户信息和手机号码
  19. 3分钟vue-router速览
  20. SQL常用基础语句(SQL常用增删改查语句及案例)

热门文章

  1. 抓取网络文件的URL地址作附件发送
  2. “区块链”究竟是什么
  3. 域名管理系统 二级域名_域名系统简介
  4. 多伦多到温莎_我想要freeCodeCamp Toronto的Twitter来发布报价,所以我做了一个免费的bot来做到这一点。...
  5. apple id无法创建_我们如何使用Apple的学习框架来创建我们的第一个应用程序
  6. autowired java_Java 基础之Autowired 是否是自动注入
  7. 关于jsp基础知识题目(一)
  8. 1145 Hashing - Average Search Time
  9. hung-yi lee_p17_卷积神经网络
  10. Oracle设置date数据比较,ORACLE DATE和TIMESTAMP数据类型的比较