关于Cookie和Session的一些定义和用法

Cookie的生存时间:
默认情况下浏览器会将Cookie保存在内存中,只要浏览器不关闭,Cookie就一直存在.
.如果希望关闭浏览器后Cookie仍然存在,可以通过设置过期时间达到目的.

void Cookie.setMaxAge(int second);
ps:second单位是秒,精度不是很高.

second>0:浏览器要保存Cookie的最长时间为设置的参数值,如果超过指定 时间浏览器会主动删除这个Cookie.
此时Cookie保存在硬盘上.

second=0:删除Cookie,在修改Cookie的生存时间为0后,随着response发送到客户端,替换原有的Cookie,
因生命周期到了即将该Cookie删除.

second<0:缺省值:浏览器会将Cookie保存到内存中.(默认情况)

练习:
设置Cookie过期时间,使得Cookie保存在硬盘上.
方案:
将setMaxAge方法对Cookie过期时间设置为大于0的数.

使用chrome浏览器查看Cookie生存时间
菜单选择设置-->显示高级设置-->隐私设置-->内容设置
查看Cookie数据,可以显示Cookie的创建时间和过期时间.


Cookie编码.
.cookie只能保存合法的ASCII字符,如果是要保存中文,需要将中文转换成合法的ASCII字符集编码

作业:通过程序判断用户是否禁用了cookie.

Cookie的路径问题:
.浏览器在访问服务器上的某个地址时,会比较Cookie的路径与该路径是否匹配,只有匹配的Cookie才会发送给服务器.
.Cookie的默认路径等于添加这个Cookie的web组件的路径
.举例
如果是该web组件添加了Cookie
http://localhost:8000/Sc1807-2JavaWeb14/cookie
  则Cookie的路径为http://localhost:8000/Sc1807-2JavaWeb14

发送Cookie的条件:
.要访问地路径必须是Cookie的路径或者其子路径,浏览器才会发送Cookie
比如:
Cookie的路径:http://localhost:8000/Sc1807-2JavaWeb14
则访问http://localhost:8000/Sc1807-2JavaWeb14/a.jsp
     或者http://localhost:8000/Sc1807-2JavaWeb14/b/c.jsp
     都会发送Cookie
  如果访问http://localhost:8000/d.jsp则不会发送Cookie.

设置Cookie的路径
.使用如下代码完成Cookie路径的设置
Cookie c1 = new Cookie("uname","Kitty");
c1.setPath("/Sc1807-2JavaWeb14");
response.addCookie(c1);

ps:修改路径的时候不要带上容器本身的地址(http://localtion:8080),否则无法识别

状态管理-session
什么叫session()会话
.浏览器访问服务器时,服务器会为每一个浏览器在服务器端的内存中分配空间,单独创建一个session对象,
该对象有一个ID属性,并且唯一,一般称之为SessionId并且服务器会将这个SessionId(使用Cookie的方式)
发送给浏览器;浏览器再次访问服务器时会将SessionId发送给服务器,服务器可以依据SessionId找到Session对象.

如何获取Session
HttpSession s = request.getSession(boolean flag);
.HttpSession是个接口,后面返回的是符合接口规范的对象
.当flag为true时:先查看请求中有没有SessionID,如果没有SessionId,则服务器创建一个
Session对象,如果有session,则依据SessionId查找对应的Session对象,找到则返回,找不到
则创建一个新的Session对象,所以当flag为true,一定能找到一个Session对象

.当flag为false,没有SessionId及有SessionId但没有找到Session对象,均返回null,找到则
返回.
request.getSession();等价于request.getSession(true)

如何使用session绑定对象(数据)
绑定对象:
void session.setAttribute(String name,Object obj);
获取绑定对象
Object session.getAttribute(String name);
移除绑定对象
void session.removeAttribute(String name);

如何删除Session对象
立即删除Session对象
Session.invalidate();

session验证:
保存登录信息,保护某些资源只有在登录验证之后才能访问(防盗链)
登录信息提交进行验证,验证通过则将用户保存在Session中,验证时报则转发回
登录页面,对于需要保护的资源

猜你喜欢

转载自blog.csdn.net/CXY_ZPH/article/details/84993857