Cookies & Session

1.两者区别:

Cookie是客户端技术
HttpSession是服务器端技术

2.Cookies是什么?

一个小信息,由服务器写给浏览器的;
由浏览器来保存;
客户端保存的Cookie信息,可以再次带给服务器

3.Cookies的属性:

name:必须的
value:必须的
comment:可选的。注释
path:可选的。
    写Cookie的程序的访问路径是:http://localhost:8080/day07/servlet/CookieDemo1
    其中:localhost就是域名;/day07/servlet就是当前Cookie的path
    如果一个Cookie的路径设置成了/day07,意味着当前应用下的所有Cookies资源浏览器都会带着它给服务器。
    所以获取和添加Path的保持一致,如:c.setPath(request.getContextPath());
domain:可选的。该Cookie所属的网站域名。(itcast.cn)默认值。
maximum age:可选的。
    不设置就是会话过程(存在浏览器的内存中),单位是秒。
    如果是0,说明要删除。
    如果是Integer.MAX_VALUE,说明永久保存。
version:可选的。版本号

4.添加&获取Cookies

实例化Cookies:Cookie c = new Cookie(名字,值);
向客户端写Cookie:c.addCookie();
得到客户端传来的Cookie:c.getCookies();
删除cookie:c.setMaxAge(0);
记住cookie:c.setMaxAge(Integer.MAX_VALUE);

5.如何区分Cookies?

不能通过名称,默认用domain+path+name来区分的。
最好固定用setPath(request.getContextPath());

6.URL地址写法:

最好使用绝对路径!"/"就代表着当前应用。
*地址给服务器用的,不用加。
*给客户端用的,要加,绝对路径要加上应用名称。

如:
        <link href=path/>                                要加/day07
        <script src=path/>                              要加/day07
        <img src=path/>                                 要加/day07
        <a href=path/>                                  要加/day07
        RequestDispatcher.include(path)                 不要加,"/"就代表着当前应用
        RequestDispatcher.forward(path)                 不要加,"/"就代表着当前应用
        HttpServletResponse.sendRedirect(path)          要加/day07
        ServletContext.getRealPath(path)                不要加,"/"就代表着当前应用

7.得到Session

Request.getSession():
*根据特殊Cookie(JSESSIONID=HttpSession对象的id,由服务器生成,唯一的)的取值,在服务器的内存中根据id查找这个HttpSession对象,找到了,取出来继续服务;
*没有找到,创建一个新的HttpSession对象。

Request.getSession(boolean b):
如果b为true,与上面方法功能完全一致;
如果为false,只查询。

8.Session的作用:

1.贯穿用户登录到注销/关闭浏览器的整个过程;
2.识别用户并保持用户信息,或者说监控用户是否登录或者已经注销;
3.防止表单重复提交;(利用session保存一个随机的令牌,用一次就销毁,看你怎么重复提交表单)
这里写图片描述
4.实现一次性验证码。(把验证码code放进session中,防止抓包对其破解)

9.禁用Cookie后的会话数据保存问题

1.客户端禁用Cookie对http://localhost访问的无效。

2.把URL重写,必须对网站中的所有URL地址都重写。
效果:url—->url;JSESSIONID=123459789
HttpServletResponse.encodeURL(url):是一个智能方法。判断用户是否禁用了Cookie,没有禁用,则不重写;禁用了就重写。
实际上就是把JSESIONID加在url后面,在浏览器地址栏可以看到。

3.网站主页:为了更好访问本网站,请不要禁用您的Cookie。

10.HttpSession对象的状态及转换(序列化)

1.更改内存中HttpSession对象的超时时间。
修改web.xml

<session-config>
<session-timeout>1</session-timeout><!--自然整数,单位是分钟-->
</session-config>

2.实现session持久化。(必须在实现session的servlet 中实现接口implements serializable,不然报错啊)
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值