java web笔记——Cookie&&Session

<Cookie&Session>


会话简单理解为:用户打开一个浏览器,访问多个超链接,访问WEB服务器多个资源,最后关闭浏览器,整个过程称之为
一个会话过程。每个会话过程用户和服务器交互不可避免会产生一些数据,要想办法为每个用户保存这些数据。


Cookie是客户端技术,程序把每个用户的数据以Cookie的形式写给用户各自的浏览器,当用户使用浏览器访问服务器中
的资源就会带着各自的数据去访问。


Session是服务器端技术,服务器在运行时可以为每个用户的浏览器创建一个独享的Session对象,把用户各自的数据放
在Session中,用户访问其他WEB资源时,其他WEB资源会调用用户Session中的数据。


注意!对Cookie的设置如setMaxAge(秒)方法,要写在response.addCookie()方法之上,否则设置不会生效。


浏览器不同,储存Cookie的位置不同,解析方式也不同。所以重新打开另一款浏览器不会有相应的Cookie,即不同浏览器
之间不共享Cookie。


修改浏览器保存的Cookie的值,服务器接收到的Cookie值会改变。


一个Cookie只能标识一种信息,它至少包含有一个标识该信息的Name和Value。一个WEB站点可以给同一个浏览器发送多
个Cookie,一个浏览器也可储存多个站点的Cookie。
一般一个浏览器允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie大小限制为4KB。
Cookie.setMaxAge(0)表示删除Cookie, 删除Cookie,Cookie的path必须一致,否则不会删除。


即使更新了程序代码,但浏览器保存的Cookie值没变,重启WEB应用后,仍能读取用户Cookie中保留的数据。


Session.getAttribute(name);返回Object对象类型,需强制转换成需要的类型。


WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(Session对象),一个浏览器独占一个Session对象(默认情
况)。因此,在需要保存用户数据时,服务器可以把用户数据写到用户浏览器独占的Session当中。当用户访问其他WEB
资源时,其他程序可以从用户的Session中取出该用户的数据。


Session和Cookie的主要区别:
Cookie是把用户的数据写给用户的浏览器。
Session把用户的数据写到独占的Session中。

Session对象由服务器创建,request.getSession()方法可以得到Session对象。


服务器端默认维持Session时间为30分钟,即与最后一次使用Seesion相隔30分钟。


服务器没设置Cookie的有效路径则默认为当前程序路径,即只能被当前程序使用。


将Session写入Cookie,可以实现Session共享,同一浏览器关闭后再打开访问同一资源在有效时间内调用同一个Session
———— HttpSession session = request.getSession();
Cookie cookie = new Cookie("JSESSIONID", session.getId());
(需设置cookie.setPath("/(WEB应用)"),使其他WEB组件程序可以访问此Session)


用户禁用Cookie后,可以使用URL重写来实现Session共享。
response.encodeRedirectURL();方法内部会在URL地址后面自动带上Session的ID号。
不是重定向的地址用response.encodeURL()重写URL。
Session进行URL重写,Session的有效期为会话过程,重启浏览器后会找不到之前的Session。


可以在web.xml文件中配置Session的失效时间(距最后一次使用Session的时间)
<session-config>
<session-timeout>(分钟数)</session-timeout>
</session-config>


request.getSession(false);只会从内存中检索Session,没有也不会重新创建,检索不到返回null
request.getSession(ture);检索不到会创建Session,默认为ture.


防止表单数据重复提交需要客户端和服务器端同时防止。


数据指纹,数据摘要,md5(128位)
令牌先随机创建一个大数值,转换成MD5码,再进行BASE64编码后使用。
编译时异常,catch后throw RuntimeException(e)给上层。
———— try {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] md5 = md.digest(token.getBytes());
return new BASE64Ecoder().encode(md5); 
}catch(NosuchAlgorithmExcption e){
throw new RuntimeException(e);
}




网络上传输数据会先BASE64编码,包括文件上传。


Session进行URL编码, Session的有效期为一个会话范围,重启浏览器会找不到之前的Session ID, 但之前的Session在
失效前不会被摧毁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值