Cookie和Session
会话
- 什么是会话?
会话是浏览器和服务器之间的多次请求和响应
也就是说,从浏览器访问服务器开始,到访问服务器结束,浏览器关闭为止的这段时间内容产生的多次请求和响应,合起来叫做浏览器和服务器之间的一次会话
- 有状态会话:一个网站知晓你登陆过、存储了一些基本信息
保存会话的两种技术
- cookie:
- 一种客户端技术,服务器响应相关信息给浏览器,保存在浏览器本地
- session:
- 服务器技术,保存会话信息到服务器中,把信息和数据放在session中
Cookie
Cookie是一种存储在计算机浏览器目录中的文本文件
一个例子:- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- req.setCharacterEncoding("gbk");
- resp.setCharacterEncoding("gbk");
- PrintWriter out = resp.getWriter();
- //cookie 服务器端从客户端取得
- Cookie[] cookies = req.getCookies();//这里返回数组
- // 判断cookie是否存在
- if(cookies!=null){
- out.print("你第一次访问的时间是:");
- for (int i = 0; i < cookies.length; i++) {
- Cookie cookie = cookies[i];
- //获取cookie的名字
- if(cookie.getName().equals("LastLoginTime")){
- // 显示最后一次登录的值
- long l = Long.parseLong(cookie.getValue());
- Date date = new Date(l);
- out.write(date.toLocaleString());
- }
- }
- }else {
- out.print("这是你第一次访问网站");
- }
- // 服务器给客户端响应cookie
- Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
- resp.addCookie(cookie);
- }
复制代码 第一次访问:

第二次访问:

- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
- cookie大小有限制4kb
- 300个cookie浏览器上限
删除cookie
- 不设置有效期,关闭浏览器,自动失效
- 设置有效期
- // 服务器给客户端响应cookie
- Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
- // 设置有效期为0
- cookie.setMaxAge(0);
- resp.addCookie(cookie);
复制代码 如果cookie设置为中文可能会出现乱码:可以通过以下方法解决- URLDecoder.decode(cookie.getValue(),"UTF-8");解码
- URLEncoder.encode("啊","utf-8");编码
复制代码 Session
- 服务器会给每一个用户(浏览器)创建一个session对象
- 一个Session独占一个浏览器,只要浏览器没关,session就存在
Session和cookie区别:
- cookie是把用户的数据保存在浏览器
- session把用户的数据写到用户独占session中,服务器端保存
- session对象由服务创建
创建场景:
- 保存一个登录用户的信息
- 购物车信息
- 整个网站经常使用的数据
使用例子:- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // 解决乱码问题
- req.setCharacterEncoding("UTF-8");
- resp.setCharacterEncoding("UTF-8");
- // 浏览器显示乱码问题
- resp.setContentType("text/html;charset=utf-8");
- // 得到session
- HttpSession session = req.getSession();
- // 给session存储东西
- session.setAttribute("name","lihua");
- // 获得session的id
- String id = session.getId();
- // 判断session是不是新创建的
- if(session.isNew()){
- resp.getWriter().write("session创建成功,id是:"+id);
- }else {
- resp.getWriter().write("session已经在服务器中存在,id是:"+id);
- }
- }
- /*session创建的时候创建一个cookie响应回去,键值分别为JSESSIONID,和session的Id,浏览器通过这个判断session是否已经创建,和辨别不同的用户
复制代码 结果:可以看出不同浏览器id不同


另外一些其他方法:- session.removeAttribute("name");//删除键值
- session.invalidate();//注销session
- //注销后重新生成一个id,相当于重新登录或关闭浏览器
复制代码 也可以在web.xml中设置默认失效时间- <session-config>
-
- <session-timeout>1</session-timeout>
- </session-config>
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |