Cookie和Session(会话编程)
Cookie是什么?
cookie是Web服务器通过浏览器保存在WWW用户端的硬盘上面的一个文本文件,当中包含了一些用户的信息。
cookie有什么作用?
cookie可以解决浏览器用户与服务器之间的无状态通信的问题。
cookie的代码实现:
构造器
会话的底层实现方式有两种:
1.cookie。
上面这幅图片表现的是cookie实现会话的底层原理。
由于不同的浏览器所保存的会话信息对象和地址空间是不同的,所以需要有一个类似于套接字编程中端口号的东西来区分不同的浏览器所保存的会话对象。在会话现实中是利用的一个session ID来区分的,见上面这幅图可知,服务器没产生一个session对象的时候就会给该对象生成一个session ID,由于这个ID需要长久的储存起来,所以最好的实现方式就是把他保存在客户端浏览器的cookie里面(储存的时候cookie的key叫做jsessionid,vlues当然就session ID了),这样当每次浏览器来请求的时候就会附加上这个session ID,然后服务器会根据这个ID查找,如果找到了,就根据ID可以获得ID对象。对应的值,这个值就是session对象的名称,既然获得了session对象的名称就可以获得该对象所储存的所有信息了,这就是利用cookie来实现会话的原理。
2.URL重写。
但是我们考虑一下,利用cookie实现会有一个问题,我们知道cookie是可以设置禁止的,如果cookie被用户禁止使用了,那怎么办?
为了解决这个问题,还提供了一种实现的方式那就是URL重写。
其实原理很简单,如果cookie被关闭了,那么我们可以在请求的URL后面跟一个jsessionid来区分不同的浏览器需要访问相应的会话对象。例如:
http://localhost:/8088/test/login.html;jsessionid=EUDJGH73KDF93SS2
不过注意的是这个jsessionid不是我们来写,而是服务器来帮我们,我们只需要调用HttpServletResponse 中已经封装好了的一个方法就可以了。方法代码:
encodeURL(java.lang.String url);
其中传的参数是你要重写的URL地址。
encodeRedirectURL(java.lang.String url)
这个方法也是重写URL地址的,作用是如果我们有一个重定向的URL,我们想重定向以后还是同一个会话,我们就可以采用这个方法来重写该重定向的URL。