JSP Cookie和session

我们知道,HTTP协议是无状态的,这样,服务器无法跟踪客户端的状态,比如用户是否已登录。于是Cookie应运而生。

Cookie一般由服务器产生,以键值对的形式将保存,然后将其打包到response中,浏览器接收到response后,会将其中的Cookie保存到本地计算机上。浏览器下一次发送request时,会读取本地计算机上的Cookie,将其打包到request中。服务可以从request中获取Cookie,从而达到跟踪用户的状态目的。

如果需要跟踪用户的登录状态,则可以在用户登录时将用户信息写入Cookie中,当用户第二次请求某个资源时,就可以从request中的Cookie中获取用户信息,从而达到判断用户是否登录的目的。

显然,使用Cookie跟踪用户状态是不安全的,因为Cookie保存到用户本地,用户计算机上的其他程序同样可以读取。另一方面,每次客户端的访问都必须传递这些Cookie,如果Cookie包含的信息很多,则无形中增加了客户端和服务器的数据传输量。

Cookie是将用户信息保存到客户端,能不能将用户信息保存到服务端呢?于是就有了session技术。

JSP产生Session是在调用HttpServletRequest.getSession()时。JSP页面的Page指令有个session属性(<%@ page language="java" session="false"%>),默认为true,JSP被编译成Servlet时,会自动加上语句HttpSession session = HttpServletRequest.getSession(true)创建一个Session,这就是JSP Session的由来。当把session设置为false时,Servlet不会自动创建Session,在JSP页面也不允许引用session。

HttpServletRequest.getSession()有个重载方法HttpServletRequest.getSession(boolean create)。create为true,表示如果没有找到session(先前没有创建session),则创建一个session;create为false,如果没有找到session,则不会创建session。HttpServletRequest.getSession()实际上是调用了HttpServletRequest.getSession(true)。

Session的实现一般基于Cookie。每一个session,都一个ID,这个ID是不会重复的。服务器会把这个ID作为Cookie传到客户端,当客户端下一次发送请求时,服务器就能通过Cookie中的ID找到对应的Session,而session可以保存用户信息。但是用户出于安全考虑,可能会禁用Cookie,服务器就无法找到session,session就会失效。于是就有了另一种session实现的机制——重写URL。通过调用response的encodeURL()即可实现。重写URL实际上就是把session ID写入URL。

Cookie和session是两种不同的技术,但是他们的目的是一样的:跟踪用户状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值