Session
session是一种位于服务端,用于存储一个会话(指打开浏览器访问某个域名,及其下面的资源,然后关掉浏览器的过程)中所需的配置信息。也就是在一个会话中,只存在一个session。对于Java web编程来说,session就是在request.getSession()创建的。同样,session也可以通过setMaxInactiveInterval()设置其生存时间。 session的结构类似一个map。可以根据需求put不同的key和value进去。通常,用作登录状态的保持,对应在客户端存储cookie,可以减少多次登录困扰。 用Java代码体验下这一过程: PrintWriter writer = response.getWriter(); HttpSession session = request.getSession();// 设置session有效时间为1天
session.setMaxInactiveInterval(60 * 60 * 24); if (session.isNew()) {
session.setAttribute("name", "cjt");
writer.write("新建Session成功"); }else { writer.write(session.getAttribute("name").toString()); } 每个会话第一次与服务端产生交互,请求头Request Header是不包含任何cookie的,所以跟踪不到session,isNew()返回true;然后在同一次回话中,接下来的访问都返回false. 对于tomcat容器来讲,getSession()默认会生成一个id为JSESSIONID的session,然后set-cookie保存到客户端(会话cookie),但是session默认生命周期是20分钟,所以第二次会话时上次的名为JESSIONID的cookie会丢失,但是session还存在服务器端, Cookie cookie是指为了辨别身份、进行 session 跟踪而储存在本地终端上的数据(通常经过加密),也可以叫做浏览器缓存。cookie是由服务端发出set-cookie指令,客户端根据设置的cookie信息创建本地cookie。 一个cookie可看做一个实体类,里面存有当前cookie的key、value、maxage、path等。在访问path路径及其子路径时,会封装一系列相关的cookie集合到Request Header中,发送到服务器。 具体java代码就是在服务端完成,记住创建了cookie对象后要添加到response中: PrintWriter writer = response.getWriter(); HttpSession session = request.getSession(); // 设置session有效时间为1天
session.setMaxInactiveInterval(60 * 60 * 24); if (session.isNew()) {
session.setAttribute("name", "cjt");
writer.write("新建Session成功"); } else {
writer.write(session.getAttribute("name").toString()); } 特别注意 在实际开发中,可能需要我们手动更改cookies的内容,那么cookie并不提供update,只有add方法。这里就要采取覆盖的方式更新了。 举个例子,你把购物车的信息都在cookie key为cart的本地常驻cookie中,然后添加了商品到购物车,这里就要更新该cookie。重点就在这里,java里面获取到key为cart的cookie,你会发现只能取到里面的key和value,path和maxage都获取不到,具体原因我也不清楚。 如果此时强行采取添加覆盖的方式,就会增加了一个会话cookie到客户端。而之前的常驻购物车cookie并没有改变。所以得每次手动设置path和maxage为了和之前保持一致,这样才能达到更新的目的。

  

最新文章

  1. 【Big Data】HADOOP集群的配置(二)
  2. 对于UDS(ISO14229-2006) 汉译的声明(必读)
  3. vim笔记2
  4. 周赛-Expression 分类: 比赛 2015-08-02 09:35 3人阅读 评论(0) 收藏
  5. C# 静态类
  6. 【弱省胡策】Round #6 String 解题报告
  7. Python操作Excel_随机点菜脚本
  8. window7下statsvn统计代码量
  9. iOSSingleton设计模式详细的说明教程
  10. hibernate--多对多双向关联(少用)
  11. the c programing language 学习过程4
  12. (贪心 字符串 打好基础)51nod 1182完美字符串
  13. 变量内容的删除、取代与替换 (Optional)
  14. HDU 1541 STAR(树状数组)
  15. 空间分析工具:GIS
  16. C#中富文本编辑器Simditor带图片上传的全部过程(MVC架构的项目)
  17. MVC5控制器传值的三种方式(ViewData,ViewBag,TempData),刚刚学习MVC5的新手,希望各位大神多多指教
  18. C# 递归与非递归算法与数学公式
  19. OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码
  20. 启动项目报错:502 Server dropped connection The following error occurred while trying to access http://localhost:8080/TestDemo:

热门文章

  1. 多媒体开发之---如何确定slice_header slice_type 的位置
  2. KEIL下分散加载文件的使用(zt)
  3. Matlab时频图
  4. python循环导入的解决方案
  5. 远程访问(HttpClient和HttpResponse的使用) 原型模式
  6. 【JAVA学习】struts2的action中使用session的方法
  7. Pentaho BIServer Community Edtion 6.1 使用教程 第二篇 迁移元数据 [HSQLDB TO MySQL]
  8. 【AWS】亚马逊云常用服务解释
  9. java集合讲解干货集
  10. A. Playing with Paper