深入理解cookie & session

问:说说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打开的窗口里做修改操作,这样就可以不用设置。

时间: 2024-08-13 20:05:46

深入理解cookie &amp; session的相关文章

正确理解cookie和session机制原理

 php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧.   cookie和session机制之间的区别和联系 具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. 而session机制采用的是一种在客户端与服务器之间保持状态

对Cookie和Session的深入理解

session对象 session对象用于存储特定的用户会话所需的信息 . Session对象的引入是为了弥补HTTP协议的不足.HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的大卖场之间的关系一样.   cookie分发 cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示

深入理解Servlet/JSP之“Cookie和Session原理”

问题描述 文章出自:http://www.goceanedu.com.cn/Read_1862.htm由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统交互过程中的状态数据.下面通过分析HTTP协议对Cookie和Session的工作原理加以了解.一.CookieCookie的含义是"服务器送给浏览器的甜点",即服务器在响应请求时可以将一些数据以"键-值"对的形式通过响应信息保存在客户端.当浏览器再次访问相同的应用时,会

cookie、session和java过滤器

基础知识理解: cookie.session和过滤器通常都是用在web应用中,cookie和session用来保存一定的数据,过滤器Filter则是在浏览器发出请求之后,而后台执行特定的请求之前发生一定的作用.之所以把这三个放一起,是因为有很多时候都会是把他们结合在一起使用,例如有些登陆程序. cookie是浏览器的机制,session是服务器的机制,但是实际上cookie也是由服务器生成的,之后返回给浏览器的,并不是浏览器本身生成.当浏览器发送某个请求时,如果拥有有效的cookie则会把这个c

Cookie 与 Session

Cookie 与 Session 是很常用的实现 Http 状态的技术,在不断的使用中,自己也对其有所理解.我接下来的讨论,是基于下面的顺序的: 1.为什么要使用 Cookie 和 Session 由于 Http 协议的请求过程,是基于 TCP/IP 的,当客户端请求服务器,服务器处理后,进行响应,这个过程是无状态的.在有些时候,是需要保存一些客户端的请求信息,识别客户端的某些状态,智能的.有 针对性的去分析某些客户端的习惯.这些时候,就需要去记录客户端的连接状态,识别请求的状态等.为了解决类似

PHP中cookie和session的区别实例分析_php实例

cookie和session是PHP程序设计中非常重要的技巧.深入理解并掌握cookie和session的应用是进行PHP程序设计的基础.本文就以实例形式来分析一下二者之间的区别.具体分析如下: 1.Cookiecookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制. PHP在http协议的头信息里发送cookie, 因此 setcookie() 函数必须在其它信息被输出到浏览器前调用,这和对 header() 函数的限制类似.  1.1 设置cookie:    可以用 set

PHP学习笔记之cookie和session验证

Cookie和Session算是网站登陆验证的常用手段了.不管论坛也好,微博也好,它们都依赖于cookie和session以完成各项工作. 这里就不具体介绍Cookie和Session的概念了,我们可以简单的把它们理解为临时钥匙,用于开启不同的网络资源.   下面开始介绍在PHP里如何操作Cookie和Session.   Cookie:   在PHP里,我们可以使用setcookie()函数来设置cookie.但特别注意,setcookie函数必须置于<html>标签之前.setcookie

cookie与session区别和关系

cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 cookie 的值. PHP用SetCookie函数来设置Cookie. SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下: int SetCookie(string name, string value, int expire, string path, st

cookie、session、sessionid 与jsessionid

cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解.   我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种方案: 凭借柜台职员的记忆,由收柜台职员来为每位顾客办理存款/取款业务,单凭职员的记忆力,要记到每位顾客的相貌,并迅速这个顾客当前的存款以及存取的次数,每次存取的金额是多少.-----------这种方式表示协议本身支持状态.      使用存折的方式,然后柜台职员就把每个顾客的存款/取款的信息