Session 机制
第一次客户请求时服务端自动产生sessionid赋值给cookie的jsessionid
然后发给客户端。
客户端第一次请求服务端时,服务端会产生一个Session对象(用于保存该客户信息);并且每个Session对象会有一个唯一的sessionID(用于区分其它Session);服务端会产生一个cookie,并且该cookie的name=Jsessionid,value=服务端SessionID的值,服务端在响应客户端时,会将该cookie发送给客户端。
第二次或第n次请求服务端时:服务端会先用客户端cookie中的JesessionID取服务端的session中匹配sessionid,如果匹配成功,说明此用户不是第一次访问。
Session和cookie区别
比较 | session | cookie |
---|---|---|
保存的位置 | 服务端 | 客户端 |
安全性 | 较安全 | 较不安全 |
常用Session方法
String getID()//获取sessionId
boolean isNew()//判断用户是否为新用户
void setAttribute( str,obj)
eg:setAttribute("a","b");//如果a对象之前不存在,则新建一个a对象;
//如果a对象已经存在,则将a 的值改为b;
Object getAttribute(str)
void invalidate():使session失效(退出登录,注销)
注销例子
----------check.jsp
<a href="invalidate.jsp">注销</a>
------session.jsp
session.invalidate();//注销
session.removeAttribute("uname");//只删除一个服务端session的uname,不删除sessionid及其它
###判断cookies 中Jsessionid 和session中sessionid是否相等例子
服务端(check.jsp)产生的sessionid
客户端(result.jsp)收到服务端响应得到的Jesessionid
setMaxRequestInterval()//设置最大非活动时间,比如说
离开已经登陆过的淘宝界面,设置最大非活动时间内可以
保证用户离开页面期间不会退出登陆界面。
JSP9大内置对象
查session类(ctrl+shift+T)---->HttpSession
application(全局对象)
String pageContextPath()//获取虚拟路径
String getRealPath()//获取虚拟路径相对的绝对路径
例子1(配置文件中)
例子2(虚拟路径)
四种范围对象(小----->大)
对象 | 解释 | 有效范围 |
---|---|---|
pageContext | JSP页面容器 (page对象) | 当前页面有效 |
request | 会话对象 | 同一次请求 有效(请求转发有效,重定向无效) |
session | 会话对象 | 同一次会话有效 |
application | 全局对象 | 全局 |
pageContext | JSP页面容器 (page对象) | 当前页面有效 |
pageContext:当前页面有效(页面跳转后无效)。
request:同一次请求有效;其他请求无效(请求转发后有
效;重定向后无效)。
session:同一次会话有效(无论怎么跳转,都有效,关闭/
切换浏览器后无效﹔从登陆->退出之间全部有。
application:全局变量;整个项目运行期间都有效(切换浏览器仍然有效);
关闭服务、其他项目无效;多个项目共享、重启后仍然
有效。
1.以上的4个范围对象,通过 setAttribute()复制
,通过getAttribute()取值。
2.以上范围对象,尽量使用最小的范围。
因为范围越大,开销越大。