1 保存session ID的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器
2 由于cookie可以被人为的禁止,必须有其他机制在cookie被禁止时依然能够把sessionID传递回服务器,经常用的一种技术叫URL重写,就是把session ID附加在url路径后面,附加有2种方式
a,作为url路径的附加信息
http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2H
b,作为查询字符串附加在url后面
http://……?……&jsessionid=
ByOK3vjFD75aPnrF7C2H
要想要网络在整个交互过程中始终保持状态,必须在客户端所有可能发送请求的路径后面都添加上这个session ID
3还有一种叫做表单隐藏字段,在服务器端会自动修改表单,添加一个隐藏字段(隐藏字段的value如果不放在表单里再好好搞一下可以把抓取页面的人恶心死)以便用户在提交表单时,把sessionID传回服务器
session ID什么时候创建呢?
错误的以为是:有客户端访问时就创建,我感觉没必要
有些用户只是上来看看有必要给他创建session么!?浪费资源,当服务器某个server(如servlet)调用HttpServletRequest.getSession(true)这样的语句时才会创建session(一般是要有一些业务需求了)
URL重写的弊端:
对所有URL都要重写啊,包括超链接,form,action,重定向的url,每个站点引用你的url,返回给用户的url(即使通过间接手段,比如response.headers中的Location字段)都要添加额外的字段,艹,麻烦死!
这样搞你的站点不能包含任何的静态页面(至少不能有链接到动态页面的链接),每个页面必须由servlet或jsp
(这里不知怎么说好,jsp编译了也是servlet啊)动态生成,即使所有都动态生成了,如果用户离开会话(例如我出去上了个厕所,session超时了)从收藏夹或书签或链接中找回来,这是会话信息已经没了,因为存储下来的链接有错误的标识信息-SessionID已经过期啦!
表单隐藏字段的弊端:
你的站点每个页面必须是由表单提交而生成的吧!你单击一个超文本链接肯定是不会有表单生成的,不能提供会话跟踪啊
Qunar写Wrapper 的一些感悟