Cookie 和 Session的区别 (4)

通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的session id,这样我们信息共享的目的就达不到了。

此时我们可以先把session id保存在persistent cookie中(通过设置session的最大有效时间),然后在新窗口中读出来,就可以得到上一个窗口的session id了,这样通过session cookie和persistent cookie的结合我们就可以实现了跨窗口的会话跟踪。

二十八、如何使用会话显示每个客户的访问次数

由于客户的访问次数是一个整型的变量,但session的属性类型中不能使用int,double,boolean等基本类型的变量,所以我们要用到这些基本类型的封装类型对象作为session对象中属性的值

  但像Integer是一种不可修改(Immutable)的数据结构:构建后就不能更改。这意味着每个请求都必须创建新的Integer对象,之后使用setAttribute来代替之前存在的老的属性的值。例如:

HttpSession session = request.getSession();

SomeImmutalbeClass value = (SomeImmutableClass)session.getAttribute(“SomeIdentifier”);

if (value= =null){

value = new SomeImmutableClass(…); // 新创建一个不可更改对象

}else{

value = new SomeImmutableClass(calculatedFrom(value)); // 对value重新计算后创建新的对象

}

session.setAttribute(“someIdentifier”,value); // 使用新创建的对象覆盖原来的老的对象

二十九、如何使用会话累计用户的数据

使用可变的数据结构,比如数组、List、Map或含有可写字段的应用程序专有的数据结构。通过这种方式,除非首次分配对象,否则不需要调用setAttribute。例如

HttpSession session = request.getSession();

SomeMutableClass value = (SomeMutableClass)session.getAttribute(“someIdentifier”);

if(value = = null){

value = new SomeMutableClass(…);

session.setAttribute(“someIdentifier”,value);

}else{

value.updateInternalAttribute(…);      // 如果已经存在该对象则更新其属性而不需重新设置属性

}

三十、不可更改对象和可更改对象在会话数据更新时的不同处理

不可更改对象因为一旦创建之后就不能更改,所以每次要修改会话中属性的值的时候,都需要

调用setAttribute(“someIdentifier”,newValue)来代替原有的属性的值,否则属性的值不会被更新

可更改对象因为其自身一般提供了修改自身属性的方法,所以每次要修改会话中属性的值的时

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgssp.html