理解session和cookie

有同学对session得理解还是不清楚,session、cookie傻傻分不清楚。今天来讲明白。

session的产生是为了弥补http协议的不足。嗯,也不能说http的不足。http设计之初已经确定了为无状态的协议。

http:超文本传输协议,顾名思义是为了传输超文本,更广义来说是资源的传输,初期主要是静态资源html等。因为资源是静态的固定的,所以记录用户的行为状态变得毫无意义,所以,HTTP协议被设计为无状态的连接协议符合它本身的需求。

后来人们发现如果http能够保持一些会话信息,将会变得更加有用。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

区别:cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

可以这样类比。有一个店铺发放会员卡,一种是给会员一张卡,上面没消费一次就盖一个戳,这就是客户端保持。另一种是发放的会员卡只有一个卡号,每次店铺店员要根据卡号查一下会员的消费情况,这就是服务端保持状态。

cookie来做这张会员卡

可以看出,即使是服务端保持状态的方案也需要有一张会员卡,所以session机制可能需要借助于cookie机制来达到保存标识的目的,当然实际上它还有其他选择。

Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。cookie的内容主要包括:名字,值,过期时间,路径和域。路径和域表明了该cookie的使用场所。

在java web开发中,session产生于HttpSession session = request.getSession();获取session,如果session不存在则创建一个。默认session是通过cookie传递的,name就是JSESSIONID。

禁用cookie

因为cookie是可以在客户端禁用的,这种情况下解决是URL重写

response.encodeRedirectURL(java.lang.String url) 用于对sendRedirect方法后的url地址进行重写。

response.encodeURL(java.lang.String url)用于对表单action和超链接的url地址进行重写


分享到:


相關文章: