| title | JavaEE Cookie vs. Session | |||
|---|---|---|---|---|
| date | 2017/11/08 | |||
| categories |
|
|||
| tags |
|
Cookie 只能保存ASCII字符串,如果需要存取 Unicode 字符或二进制数据,需要进行UTF-8、GBK或BASE64等方式的编码。
Session 可以存取任何类型的数据,甚至是任何 Java 类。可以将 Session 看成是一个 Java 容器类。
Cookie 存于客户端浏览器,一些客户端的程序可能会窥探、复制或修改 Cookie 内容。
Session 存于服务器,对客户端是透明的,不存在敏感信息泄露的危险。
使用 Cookie 可以保证长时间登录有效,只要设置 Cookie 的maxAge属性为一个很大的数字。
而 Session 虽然理论上也可以通过设置很大的数值来保持长时间登录有效,但是,由于 Session 依赖于名为JESSIONID的 Cookie,而 Cookie JESSIONID的maxAge默认为-1,只要关闭了浏览器该 Session 就会失效,因此,Session 不能实现信息永久有效的效果。使用 URL 地址重写也不能实现。
由于 Session 是保存在服务器的,每个用户都会产生一个 Session,如果并发访问的用户非常多,会产生很多的 Session,消耗大量的内存。
而 Cookie 由于保存在客户端浏览器上,所以不占用服务器资源。
Cookie 需要浏览器支持才能使用。
如果浏览器不支持 Cookie,需要使用 Session 以及 URL 地址重写。
需要注意的事所有的用到 Session 程序的 URL 都要使用response.encodeURL(StringURL) 或response.encodeRediretURL(String URL)进行 URL 地址重写,否则导致 Session 会话跟踪失效。
Cookie 支持跨域名。
Session 不支持跨域名。