从零开始学习Java Web(六):session和cookie
来源:互联网 发布:白芨吉利知胃病中草药 编辑:程序博客网 时间:2024/05/22 00:48
我们或许都对session和cookie有一些多多少少的概念,知道session是用来标识同一个用户的,cookie是客户端用来保存键值对的参数。一个会话过程就是session的一个生命周期,当session过期了,会话结束。
那么,怎么理解session和cookie呢,它们之间有什么联系。
首先,我们来看看session是什么时候产生的,当我们调用下面的代码时,服务器会产生一个session。
HttpSession session = request.getSession();
当执行该方法时,假如session已经存在,则获取已存在的session,当然我们比较关心的是当session不存在时,服务器做什么操作呢?
首先,服务器会生成一个不重复的字符串JSESSIONID,初始化一个session对象,并将JSESSIONID和这个session对象绑定起来,最后响应给客户端时,会附带Set-Cookie:JSESSIONID=xxxxxxx的header回去,告诉客户端保存这个cookie,该cookie的键是JSESSIONID,值是xxxxxx。当客户端再次发起请求的时候,会带上这个cookie,服务端就会拿到JSESSIONID的值,去查找相应的session对象。这样,服务器就能知道带有相同JSESSIONID的请求是同一个用户发出的。
session就好比我们的身份证号码,我的身份证对应的就是我,而不是别人。
那么,我怎么知道session是刚创建的,还是原有的?或者说我只想拿到原有的session,如果原来没有,那我就不往下操作,这时候该怎么实现?
我们可以调用session.isNew()判断session是否是新建的,可以调用request.getSession(false)来拿到原有的session,如果session没有存在,则返回null。其实request.getSession(true)等同于request.getSession();
我们常听别人说,cookie保存在客户端(浏览器),session保存在服务器。但是,却很少人告诉我们,服务端session的获取要依赖保存于客户端的JSESSIONID去识别。如果客户端禁用cookie,那么服务器一般情况下都得不到JSESSIONID,调用HttpSession session = request.getSession()只会拿到新创建的session,每次请求都新创建一个会话。
那么,禁用cookie的情况下如何保持同一个会话呢?
这里有一个办法,就是采用URL重写技术,通过调用response.encodeURL(url)或者response.encodeRedirectURL(url),这两个方法会返回一个字符串,将”;jsessionid=xxxxx”拼接到url的后面,这样,服务器就能拿到jsessionid,也就能拿到对应的session对象了。
session只有三种死法:
1.超时
2.调用session.invalidate();
3.服务器崩溃或者停止
如何设置超时时间:
<!--在web.xml设置,这里设置的单位是分钟--><session-config> <session-timeout>15</session-timeout></session-config>//在代码中设置,这里的单位是秒session.setMaxInactiveInterval(15*60);
会话的维持一般不需要我们操作,我们主要使用的是session的两个方法。
session.getAttribute(String);session.setAttribute(String, Object);
例如,我们登录时执行以下代码:
User user=new User("张三");session.setAttribute("user", user);
判断登录时:
User user=(User)session.getAttribute("user");if(user==null){ throw new RuntimeException("您没有登录,无权操作!");}
- 从零开始学习Java Web(六):session和cookie
- php 学习笔记 -- Cookie 和 Session(六)
- JAVA WEB学习笔记(一)-Cookie和Session专题
- JAVA WEB学习笔记-Cookie和Session专题
- JAVA WEB学习笔记(一)-Cookie和Session专题
- JAVA WEB学习笔记(一)-Cookie和Session专题
- JAVA WEB学习笔记(一)-Cookie和Session专题
- JAVA WEB学习笔记(一)-Cookie和Session专题
- 从零开始学习laravel web(六)
- Java.Web学习笔记 Cookie Session
- java web 笔记(一):Cookie和Session
- Java Web中cookie和session详解
- Java Web中cookie和session详解
- Java Web中cookie和session详解
- web-cookie和session
- 从零开始学习Java Web(四):初识HttpServletRequest和HttpServletResponse
- cookie和session学习
- Cookie和Session学习
- 软件测试较好的学习网站
- JS中Array对象和String对象的常用方法
- List<?> 转换为 List<实体类>
- Android studio连接夜神
- 数据库设计之三大范式
- 从零开始学习Java Web(六):session和cookie
- 史上最全的大数据分析和制作工具
- 字符串:字符流中第一个不重复的字符
- android listview 数据加载错乱、错位、重复
- 利用Python编写一个程序 统计当前目录下的每个文件类型的文件数目
- 深度学习进阶之路
- C和C++文件混合编译
- springmvc在controller中return视图跳转不了
- JavaScript设计模式--开篇