Session整理
来源:互联网 发布:数控折弯编程教学视频 编辑:程序博客网 时间:2024/06/05 05:10
简介:
在WEB开发中,服务器可以用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因而,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其他程序时,其他程序可以从用户的session中取出该用户的数据,为用户服务
Session和Cookie的区别
Cookie是把用户的数据写给用户的浏览器
Session技术是把用户的数据写给用户独占的session中
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象
Session实现原理
服务器是如何实现一个session为一个用户浏览器服务的?
服务器创建session出来后,会把session的id号,以cookie的形式写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来,就会使用内存中与之对应的session为之服务。
如果想要关掉浏览器再打开还可以使用同一个session,则需要给服务器回送的cookie设置有效时间(服务器自动回送的时候是没有有效期的)。具体做法是通过session对象的getId方法获得该session的id,然后创建一个cookie,该cookie的名字为”JSESSIONID”,值就是刚刚获得的id,再将该cookie设置下有效期,(也可以设置下Path),并添加到cookie中即可。但是有效期不得超过30分钟,因为浏览器关掉后,session只保存30分钟。
第一次访问时,服务器会创建个新的session,并且把session的id以cookie的形式发送给客户端浏览器
public class SessionDemo1 extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF=8"); response.setContentType("text/html;charset=UTF-8"); //使用request对象的getSession()获取session,如果session不存在则创建一个 HttpSession session = request.getSession();//将数据存储到session中 session.setAttribute("data", "孤傲苍狼");//获取session的Id22 String sessionId = session.getId();//判断session是不是新创建的 if (session.isNew()) { response.getWriter().print("session创建成功,session的id是:"+sessionId); }else { response.getWriter().print("服务器已经存在该session了,session的id是:"+sessionId); } } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
点击刷新按钮,再次请求服务器,此时就可以看到浏览器再请求服务器时,会把存储到cookie中的session的Id一起传递给服务器端。
Session的常用方法
session的创建和获取
调用HttpServletRequest.getSession(true)这样的语句时session会被创建。
session的销毁
程序调用HttpSession.invalidate()
距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
服务器进程被停止
注意:关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。
session中方法分两大类
存取属性
其它方法
存取属性方法
getAttribute(String) 获取session中存储的信息
setAttribute(String,Object) 向session中添加信息
remove(String) 移除session中存储的信息
其它方法
void invalidate() 销毁session
String getId(): 取得session id
Long getCreationTime() 获取session的创建时间
Long getMaxInactiveInterval(): 最大不活动时间
void setMaxInactiveInterval(int)
Boolean isNew() 是否是新创建的session
session对象主要用于属性操作和会话管理,常用方法如下:
1.public void setAttribute(Sting name, Object value),设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。
2.public Object getAttribute(String name),在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。
3.public void removeAttribute(String name),删除指定名字的session属性,若该属性不存在,则出现异常。
4.public void invalidate(),使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。5.public String getId( ),获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。
6.public void setMaxInactiveInterval(int interval),设置会话的最大持续时间,单位是秒,负数表明会话永不失效。
7.public int getMaxInActiveInterval(),获取会话的最大持续时间。
8.使用session对象的getCreationTime()和getLastAccessedTime()方法可以获取会话创建的时间和最后访问的时间,但其返回值是毫秒,一般需要使用下面的转换来获取具体日期和时间。
Date creationTime = new Date(session.getCreationTime());
Date accessedTime = new Date(session.getLastAccessedTime());
案例:
<body> <b> 会话ID:<%=session.getId() %> <br> 是否新会话:<%=session.isNew() %><br> 设置和获取属性对象:用户名 = <%session.setAttribute("用户名","陈宁"); %> <%=session.getAttribute("用户名") %><br> <% Date creationTime = new Date(session.getCreationTime()); Date accessedTime = new Date(session.getLastAccessedTime()); %> 会话创建时间:<%=creationTime %><br> 上次访问时间:<%=accessedTime %><br> 会话持续时间(s):<%=session.getMaxInactiveInterval() %><br> <%session.setMaxInactiveInterval(12); %> 修改后的会话持续时间(s):<%=session.getMaxInactiveInterval() %><br> <%session.invalidate(); %> </b> </body>
参考博客:
http://www.cnblogs.com/xdp-gacl/p/3855702.html
http://blog.csdn.net/eson_15/article/details/51261326
- session整理
- 【整理】session
- Session整理
- Session一些整理
- session(整理)
- Session丢失整理汇总
- session与cookie整理
- JavaWeb Session问题整理
- session学习网站整理
- session相关整理
- session失效的一些整理
- 【知识整理】Hibernate-管理Session
- 整理Flex获得session的方法
- redis tomcat session共享 资料整理
- 整理request ,response ,会话session ,全局application
- ruby on rails中的session & cookies整理
- session和cookie的区别简单整理
- Java Web 3.6 session对象知识点整理
- Effective C++ — 继承与面向对象设计
- Java 源码分析(四)
- 数据结构单链表基本实现
- vue里面的scroll事件,以及如何处理事件问题,附带动画效果如何实现
- 【正一专栏】火箭人对怂疯老头——朝鲜史上最高级别的应对措施是啥?
- Session整理
- 10月计划
- Eclipse-远程Debug,查找生产环境问题的利器
- 新希望美好辣子蜀黍小火锅招商
- 【正一专栏】读《江村经济》——献给妻子的书
- 单例模式
- java的上传与下载
- 快速排序
- 微信公众号怎么申请-微信公众号使用教程1