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为了和之前保持一致,这样才能达到更新的目的。

  

Session与Cookie(1)的更多相关文章

  1. 理解Session与Cookie

    写在前面的话:Session和Cookie是非常有意思的两个概念,对于两者的管理可以处理的很复杂,但是无论如何,理解Session和Cookie的基本概念和发明初衷,对于问题的解决,大有裨益. === ...

  2. PHP之session与cookie

    1.session与cookie的关系 众所周知,session是存储在服务器端,cookie是存储在客户端,如果禁用了浏览器的cookie功能,很多时候(除非进行了特殊配置)服务器端就无法再读取se ...

  3. 安全退出,清空Session或Cookie

    概览: 网站中点击退出,如果仅仅是重定向到登录/出页面,此时在浏览器地址栏中输入登录后的某个页面地址如主页,你会发现不用登录就能访问.这种所谓的退出并不是安全的. 那么怎样做到安全退出呢? 那就是点击 ...

  4. 11月7日上午PHP会话控制(session和cookie)、跨页面传值

    1.session  登录上一个页面以后,长时间没有操作,刷新页面以后需要重新登录. 特点:(1)session是存储在服务器:   (2)session每个人(登陆者)存一份: (3)session ...

  5. 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session

    什么是 Session 在 web 应用开发中,Session 被称为会话.主要被用于保存某个访问者的数据. 由于 HTTP 无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的 ...

  6. Session与Cookie概念

    摘:一.Session机制session是一种服务器端的状态管理技术,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息.当程序需要为某个客户端的请求创建一个session的时候,服务 ...

  7. session和cookie

    第一次听到cookie这个词的时候着实兴奋了一段时间,以为是小饼干呢~快喝一杯82年的java压压惊!哈哈~ 与cookie的第一次邂逅——清缓存和清cookie 刚毕业的时候上班,做二次开发,明明后 ...

  8. 深入理解Session与Cookie

    Session与cookie的作用都是为了保持访问用户与后端服务器的交互状态. cookie通过把所有要保存的数据通过HTTP协议的头部从客户端传递到服务端,又从服务端再传回到客户端,所有的数据都存储 ...

  9. TP中的session和cookie

    session:1.session('name','value');  //设置session2.$value = session('name');  // 获取所有的session 3.2.2版本新 ...

  10. thinkphp里的session、cookie方法

    thinkphp里,对于session和cookie的操作,不管是存值.获取.删除,均只有一个方法.现分享出来,供大家参考参考. /** * session管理函数 * @param string|a ...

随机推荐

  1. 进程间的八种通信方式----共享内存是最快的 IPC 方式

    1.无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. 2.高级管道(popen):将另一个程序当做一个新 ...

  2. Android-彻底地理解Binder

    转自:https://blog.csdn.net/huachao1001 https://blog.csdn.net/huachao1001/article/details/51504469 你是不是 ...

  3. mongo 介绍

    [介绍]:MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB 旨在为WEB应用提供可扩展的高性能数据存 ...

  4. Java泛型【转】

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...

  5. 【题解】CF264B Good Sequences

    [题解]CF264B Good Sequences 具有很明显的无后效性. 考虑\(dp\). 考虑初始条件,显然是\(dp(0)=0\) 考虑转移,显然是\(dp(t)=max(dp[k])+1\) ...

  6. Django项目高频使用文件

    数据库配置: MySQL数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost' ...

  7. ubuntu安装opencv(自己编译)

    如果只需要python的,只需pip install opencv-python,然后apt-get一下下面第一点的东东. 1/ sudo apt-get install build-essentia ...

  8. Android/iOS Remote debugging

    简单介绍 使用下面方法可以定位webview中的元素,无法定位view中的元素. 原文地址:http://mp.weixin.qq.com/s/y_UfdgjT_pkKgYivJmqt7Q webvi ...

  9. koa-bodyparser返回413状态码的问题

    413 Request Entity Too Large(请求实体太大) 数日前,我用 node.js 写的一个日志服务抛出了这个状态码-- 自己写的服务抛出了一个自己都不认识的状态码,这是最气的!( ...

  10. 大数据之路- Hadoop环境搭建(Linux)

    前期部署 1.JDK 2.上传HADOOP安装包 2.1官网:http://hadoop.apache.org/ 2.2下载hadoop-2.6.1的这个tar.gz文件,官网: https://ar ...