ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Cookie与Session基本使用

2022-01-29 13:30:48  阅读:104  来源: 互联网

标签:基本 浏览器 账号 Session cookie Cookie 客户端


Cookie

1. Cookie的基本用法

  • 服务器通过操作Cookie类对象对客户端Cookie进行操作。
  • 通过request.getCookie( ) 获取客户端提交的所有Cookie(以Cookie[ ]数组形式返回)
  • 通过response.addCookie(Cookie cookie)向客户端设置Cookie

2. Cookie的不可跨域名性
问题:Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?

解答:Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。

3. Cookie的所有属性
每个属性都有setter、getter方法
在这里插入图片描述
4. Cookie常用方法

  1. 读写maxAge属性的方法
Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
cookie.setMaxAge(Integer.MAX_VALUE);           // 设置生命周期为MAX_VALUE
  1. 在客户端添加Cookie
Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
response.addCookie(cookie);                    // 输出到客户端
  1. 修改Cookie
  • 注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。
  • response对象提供的Cookie操作方法只有一个添加操作add(Cookie cookie)。要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie,达到修改的目的。
Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
response.addCookie(cookie);                    // 输出到客户端

Cookie cookie = new Cookie("username","hello");   // 新建Cookie
response.addCookie(cookie);                    // 输出到客户端
  1. 删除Cookie
  • 如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。
Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
cookie.setMaxAge(0);                          // 设置生命周期为0,不能为负数
response.addCookie(cookie);                    // 必须执行这一句

5. 登陆案例

  • 应用场景:如果用户是在自己家的电脑上网,登录时就可以记住他的登录信息,下次访问时不需要再次登录,直接访问即可。
  • 实现方法:最直接的是把用户名和密码都保存在Cookie中,下次访问时检查Cookie中的用户名与密码,与数据库比较。但是这是一种比较危险的选择,一般来说不会将隐私信息保存到Cookie中。
  • 实现方法:基于上述方法对密码进行加密,再将账号和密码保存到Cookie中
  • 实现方法:把账号按照一定的规则加密后,加密账号与账号一块保存到Cookie中。下次访问时只需要判断账号的加密规则是否正确即可。这样可以做到只在登录时查询一次数据库,以后访问验证登录信息时不再查询数据库。
  • 应用实例:把账号保存到名为account的Cookie中,把账号连同加密后的账号保存到名为ssid的Cookie中。验证时验证Cookie中的账号与加密后是否与Cookie中的ssid相等。account_Cookie(账号)、ssid_Cookie(账号、加密账号)

Session

1. Session的基本使用方法

  • 通过request获取Session
  • 通过session.setAttribute( )设置Session
  • 通过session.getAttribute( )获取Session
HttpSession session = request.getSession();			//Servlet底层通过的SESSIONID,获取Session对象。
session.setAttribute("loginTime",new Date());
out.println("登录时间为:"+(Date) session.getAttribute("loginTime"));

2. Session的生命周期

  • Session保存在服务器端,为了获得更高的存取速度,服务器一般把Session放在内存中。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
  • Session在用户第一次访问服务器的时候自动创建。因为Session是Servlet、JSP底层实现的,对高级语言透明,所以只有访问JSP、Servlet等程序时才会创建Session。
  • Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session活跃了一次。
    在这里插入图片描述
    3. Session细节
  • 虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持的。这是因为Session需要使用Cookie作为识别标志。因此服务器向客户端浏览器发送一个名为JSESSIONED的Cookie,它的值为该Session的id。Session也将依据该Cookie来识别是否为同一用户。
  • 该Cookie为服务器自动生成的,maxAge属性默认为-1,表示仅当前浏览器内有效,并且各浏览器窗口不共享,关闭浏览器就会失效。
  • 同一个机器的两个浏览器窗口访问服务器时,会生成两个不同的Session,但是由浏览器窗口内的链接、脚本等打开的新窗口(子窗口)会共有父窗口的Session。

4. Session常用方法

  • void setAttribute(String attribute,Object value):设置Session属性。value信息不宜过大
  • String getAttribute(String attribute):返回Session属性
  • Enumeration getAttributeNames();返回Session中存在的属性名
  • void removeAttribute(String attribute):移除Session属性
  • String getId():返回Session的ID。该ID由服务器自动创建,即继承的Servlet接口底层自己实现,不会重复
  • long getCreationTime():返回Session的创建日期Date createTime = new Date(session.getCreationTime());
  • long getLastAccessedTime():返回Session的最后活跃时间
  • int getMaxInactiveInterval():返回Session的超时时间
  • int setMaxInactiveInterval(int second):设置Session的超时时间
  • boolean isNew():返回该Session是否新创建的
  • void invalidate():使Session失效

标签:基本,浏览器,账号,Session,cookie,Cookie,客户端
来源: https://blog.csdn.net/m0_46638350/article/details/122738233

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有