您的位置:首页 > 编程语言 > Java开发

java web笔记——Cookie&&Session

2016-04-26 23:59 309 查看
<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在

失效前不会被摧毁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: