开发者社区> dragonwang> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

深入理解cookie & session

简介: 问:说说session的原理和你对它的理解? 1.session的运行范围 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 2.session的创建、关闭、删除       创建时间:直到某server端程序调用HttpServletRequest.getSession(true)  |  request.getSess
+关注继续查看

:说说session的理和你对它的理解?

1.session的运行范围

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

2.session的创建、关闭、删除

      创建时间:直到某server端程序调用HttpServletRequest.getSession(true)  |  request.getSessoin();这样的语句时session才被创建,注意如果JSP没有显示的使用 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true).

由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。

      JSP关闭session:(1)<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"session="false"%>

       删除session/失效session:      

       a.程序调用HttpSession.invalidate();       

       b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;

       c.服务器进程被停止(非持久session)

3.一般情况下,session都是存储在内存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空,如果设置了session的持久化特性,服务器就会把session保存到硬盘上(这个保存是把内存中的session复制一份到本地),当服务器进程重新启动或这些信息将能够被再次使用.

4.如何做到在浏览器关闭时删除session
严格的讲,做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。

5.当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识- 称为session_id,如果已包含一个session_id则说明以前已经为此客户端创建过session,服务器就按照session_id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session_id,则为此客户端创建一个session并且生成一个与此session相关联的session_id,session_id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。 保存这个session_id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID.而由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面(采用第一种方式有利于把session id的信息和正常程序参数区分开来)。

:说说cookie的理和你对它的理解?

      cookie是基于客户端的技术,正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。
       而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

        cookie分为两种类型,一种为会话cookie,一种为持久cookie。会话cookie存储在浏览器内存中,当浏览器关闭的时候,会话cookie就会消失。持久cookie是保存在硬盘中。如果不设置cookie的最大存活时间的时候(new Cookie().setMaxAge()),就为会话cookie,如果设置了最大存活时间,那么这时cookie将会变成持久cookie。浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。

如果要删除cookie,那么就只要将其最大生存时间设置为0即可;但是此时必须注意,cookie的路径path必须相同,否则不能删除指定的cookie。

问:说说session和cookie的区别?

问:用户禁用cookie的时候如何使用session?

       经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面(采用第一种方式有利于把session id的信息和正常程序参数区分开来)。

问:如何不用session实现用户登录和购物车?


问:如何实现同一应用程序分布部署的时候session同步?

       方案一:

问:如何实现不同应用程序的session共享?


问:开两个浏览器窗口访问应用程序会使用同一个session还是不同的session
         对session来说是只认id,因此不同的浏览器,不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。


问:如何防止用户打开两个浏览器窗口操作导致的session混乱?
       这个问题与防止表单多次提交是类似的,可以通过设置客户端的令牌来解决。就是在服务器每次生成一个不同的id返回给客户端,同时保存在session里,客户端提交表单时必须把这个id也返回服务器,程序首先比较返回的id与保存在session里的值是否一致,如果不一致则说明本次操作已经被提交过了。可以参看《J2EE核心模式》关于表示层模式的部分。需要注意的是对于使用javascript window.open打开的窗口,一般不设置这个id,或者使用单独的id,以防主窗口无法操作,建议不要再window.open打开的窗口里做修改操作,这样就可以不用设置。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何理解Cookie和Session
如何理解Cookie和Session
0 0
深入理解JVM - G1收集器
深入理解JVM - G1收集器
0 0
一文彻底理解 Cookie、Session、Token
一文彻底理解 Cookie、Session、Token
0 0
一文彻底理解 Cookie、Session、Token
很久很久以前,Web 基本上就是文档的浏览而已,既然是浏览,作为服务器,不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的 HTTP 协议,就是请求加响应,尤其是我不用记住是谁刚刚发了 HTTP 请求,每个请求对我来说都是全新的。这段时间很嗨皮。 但是随着交互式 Web 应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统,哪
0 0
Java Web之Cookie和Session的理解
Cookie和Session.jpg 日常现象 登录了某个网站,过一会儿再登录,诶,不用输入密码了,直接是登录状态了,好神奇~~~ 在某网站看了一部手机,接下来浏览其他网站,旁边的广告全是手机和类似信息,好恐怖~~~ 浏览某网站时,提示我是第66666位访问的客户,真的假的? 其实这些都是Cookie和Session在后面作祟,下面就带大家学习学习这两个东东。
774 0
快速理解 session/token/cookie 认证方式
目录 目录 cookie session token cookie Web Application 一般以 HTTP 协议作为传输协议, 但 HTTP 协议是无状态的.
761 0
深入浅出seesion和cookie
session在计算机中,尤其是在网络应用中,称为“会话控制”。session 对象存储特定用户会话所需的属性及配置信息。session跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。
783 0
Cookie & Session & CSRF
新blog地址:http://hengyunabc.github.io/cookie-and-session-and-csrf/ 在线幻灯片地址: Cookie & Session & CSRF ...
657 0
彻底杜绝PHP的session cookie错误
本文讨论的是如何彻底杜绝warning: Cannot add header information - headers already sent in...... 这种令人莫明其妙的的错误。   只要你写过PHP代码,相信都遇上过这个大多时候都令人莫明其妙的warning吧..今天我们就来搞定它...............   看了PHP手册,回答如下:   消息“Warning: Cannot send session cookie - headers already sent。
818 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载