cookie和session的会话和会话状态讲解
一、会话概述
1)现象:HTTP协议是一种无状态的协议,Web服务器本身不能识别出哪些请求是同一个浏览器发出的,浏览器的每一次请求都是完全孤立的。
2)解决:借助会话状态,Web服务器能够把属于同一会话中的一系列请求和响应过程关联起来。
3)实现:需要浏览器对其发出的每个请求消息都进行标识。这个标识称为会话ID(SessionID)。
二、Cookie
一:存在两种类型的cookie:
1>会话cookie (session cookie)
不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口, cookie就消失了。
生命期为浏览器会话期。
一般不保存在硬盘上而是保存在内存里。
2>持久性cookie (persistent cookies)
设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
保存在用户硬盘上面,同一浏览器可以获取。
二: session相关知识
2.1: 什么是session?
Session 是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过sessionid来区分不同的客户,session是以cookie或url重 写为基础.
2.2: session 的工作原理
client———>1.request————————->server
2. session_start();
|<————-3.reponse(SESSION_ID)<——–|
|————->4.request(SESSION_ID)———>|
5. session_start();
|<————-6.reponse(SESSION_ID)<———|
|————->7. request(SESSION_ID + logout)–>|
8. session_destroy();
|<————-9. reponse(删除cookie文件)<——-|
client打开网页,向server发出请求,client上由于没有相应的cookie文件存在,在请求中不输送SESSION_ID
服务器在接受到client的请求后,通过执行session_start()函数开始进行session的处理, 首先确认请求中有没有SESSION_ID,如果没有的话,发行一个新的SESSION_ID;如果有的话, 则调用那个存有SESSION_ID的文件,并把信息写入$_SESSION里去,并存入以sess_开头的文件里。
把写入信息的$_SESSION参数发回给client,client在GET服务器发来的信息后,把这些信息保存在cookie里。
client把cookie里的SESSION_ID一起写入header后再次向server发出请求。重复1-3的操作
client发出登出请求
服务器接受请求后,通过执行session_destroy()函数开始删除session文件处理
服务器向client发出删除保存在client上的cookie文件的命令: setcookie(session_name(), ”, time()-60, ‘/’);
2.3: 注意
通常情况下是不能跨窗口使用,但用sessionid保存在持久cookie中,然后在从新窗口中读取,就可以得到sessionid,实现跨窗口的使用.
在大浏览量的网站,session并不保险,可能会出现重复的sessionid.
Session ID不能从硬盘上的Cookie文件获得,如果想在客户端获知自己的Session ID,只能通过Javascrīpt来读取。
2.4 php使用及设置
Session_start() :开始一个会话或者返回已经存在的会话。在使用Session_start()之前浏览器不能有任何输出,否则会发生以下错误。你可以在php.ini里 启动session.auto_start=1,这样就无需每次使用session之前都要调用session_start()。
如果在session.auto_start=1,会让session_save_path (‘./t/’);变的无效。因为后一条语句须放前面。
2.5 增加PHP的Session存储和处理能力
;session.save_path = “N;MODE;/path” 这项设置提供给我们可以给session存放目录进行多级散列,其中“N”表示要设置的目录级数,
“MODE”表示目录的权限属性,默认为600
2.6:多服务器共享php的SESSION
1、NFS或者Samba共享的方法,让各个服务器上存放session文件的磁盘共享,这种方法简单可行。
2、集中存储到数据库中,这是比较多的实现方法,通过php提供的session_set_save_handler()函数来重定义session函数,推荐使用这种方法。
三: cookie知识
什么是 Cookie?其工作原理如何?Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息。 Cookie 的基本工作原理如果用户再次访问站点上的页面,当该用户输入 URLwww.*****.com时,浏览器就会在本地硬盘上查找与该 URL 相关联的 Cookie。如果该 Cookie 存在,浏览器就将它与页面请求一起发送到您的站点。Cookie 有哪些用途?最根本的用途是:Cookie 能够帮助 Web 站点保存有关访问者的信息。更概括地说,Cookie 是一种保持Web 应用程序连续性(即执行“状态管理”)的方法.使 Web 站点记住您.
1、客户端执行程序请求 服务器发回请求结果 并且生成一个cookie给客户端 所以 第二次刷新的时候 才会有cookie的出现
2、session是保存在内存中,跟进程是同时存在的会话cookie,但是此时服务器端还保存有session文件 需要设置时间来删除session文件
3、Cookie是在本地Cookie文件中保存一些信息,Cookie文件中保存的是键值对(key-value)。Cookie文件存放于你本地计算机系统盘的Document and Settings/用户名 目录下。如果你访问的网站的名称为www.abc.com,那么一般来说,Cookie文件的名称为 用户名@abc.com,你可以自己打开文件夹看一看。你提到的getName获得的是保存在Cookie文件中某一个Cookie的key值。
我们知道,session是在服务器端保持用户会话数据的一种方法,对应的cookie是在客户端保持用户数据。HTTP协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系,最早,Netscape将cookie引入浏览器,使得数据可以客户端跨页面交换,那么服务器是如何记住众多用户的会话数据呢?
首先要将客户端和服务器端建立一一联系,每个客户端都得有一个唯一标识,这样服务器才能识别出来。建议唯一标识的方法有两种:cookie或者通过GET方式指定。默认配置的PHP使用session的时会建立一个名叫”PHPSESSID”的cookie(可以通过php.ini修改session.name值指定),如果客户端禁用cookie,你也可以指定通过GET方式把session id传到服务器(修改php.ini中session.use_trans_sid等参数)。
我们查看服务器端session.save_path目录会发现很多类似sess_vv9lpgf0nmkurgvkba1vbvj915这样的文件,这个其实就是session id “vv9lpgf0nmkurgvkba1vbvj915〃对应的数据。真相就在这里,客户端将session id传递到服务器,服务器根据session id找到对应的文件,读取的时候对文件内容进行反序列化就得到session的值,保存的时候先序列化再写入。
三、HttpSession
1. 概念
1)含义:在Web开发环境中,session 是指一类用来在客户端与服务器之间保持状态的解决方案。有时候也用来指这种解决方案的存储结构。
2)机制:采用在服务器端保持HTTP状态信息。
3)原理:
创建一个 session 时先检查这个客户端的请求里是否包含了一个 session 标识(即sessionID),即请求里是否存放了名为"JESESSIONID",值为 sessionID 的 cookie。
若已存在就检索出来使用,
否则为此客户创建一个 session,并生成一个与此 session 相关联的 sessionID,用 set-cookie 方式传递给请求,那么下一次请求发出时,就会使用此 sessionID 作为 cookie 中名为"JESESSIONID"的值进行传递 sessionID。
4)保存方式:最常用的是用 cookie 保存。但如果 cokkie 被禁用,必须有其他机制进行保存。如URL重写:把 sessionID 附加在URL路径后面。
5)注意:由于是通常是用 cookie 来保存的,所以如果让 cookie 持久化就可以在重启浏览器后也能获取到该 sessionID。
//用持久化cookie保存sessionIDCookie cookie = new Cookie("JESESSIONID",session.getId()); cookie.setMaxAge(20); response.addCookie(cookie);
2. Session的创建
1) Session 属性:
若 page 指定的 Session 属性默认为 true,那么 第一次访问一个 WEB 应用的一个 JSP 页面时,该页面都必须有一个和这个请求相关联的 Session 对象。
否则JSP 页面不会要求一定有一个 Session 对象和当前的 JSP 页面相关联,所以第一次访问JSP页面时不会创建一个 Session。
2)request.getSession(boolean flag):
true,则一定会返回一个 HttpSession 对象,如果已经有和当前 JSP 页面关联的 HttpSession对象,直接返回;如果没有,则创建一个新的返回。
false,则若没有和当前JSP页面关联的 HttpSession 对象返回null,否则返回取得的HttpSession对象。
request.getSession() 相当于 request.getSession(true)。
3. Session对象的销毁
1)调用HttpSession 的 invalidate()方法。
2)HttpSession 超过过期时间自动销毁,可以在 Tomcat 的 web.xml 文件中配置 Session 的最大时效, 单位是分钟。
<!-- apache-tomcat-x.x.xx\conf\web.xml --><session-config><session-timeout>30</session-timeout></session-config></p> <p> </p> <p><span style="color: #000000"><em>相关方法签名:</em></span></p> <ul class=" list-paddingleft-2"> <li><p><span style="color: #000000">int getMaxInactiveInterval() //返回最大时效,单位:秒</span></p></li> <li><p><span style="color: #000000">void setMaxInactiveInterval(int interval) //设置最大时效</span></p></li> </ul> <p><span style="color: #000000">3)服务器卸载当前 WEB 应用。</span></p> <p> </p> <h2 id="span-style-color-Session相关方法-span"><span style="color: #000000">4.Session相关方法</span></h2> <p><span style="color: #000000">String getId() //得到sessionID</span></p> <p><span style="color: #000000">boolean isNew() //该session是不是新创建的<br></span></p> <p><span style="color: #000000">long getCreationTime() //该session被创建的时间<br></span></p> <p><span style="color: #000000">long getLastAccessedTime() //该session最后一次被访问的时间</span></p> <p><span style="color: #000000">void <span style="color: #ff0000">setAttribute</span>(String key, Object value) //存放值,相当于哈希表<br></span></p> <p><span style="color: #000000">Object <span style="color: #ff0000">getAttrbute</span>(String key) //根据键从session中取得对应的值</span></p> <p> </p> <h2 id="span-style-color-URL重写实现Session跟踪-span"><span style="color: #000000">5.URL重写实现Session跟踪</span></h2> <p><span style="color: #000000"><em>方法签名:</em>String encodeURL(String url) //该方法会在URL后面加上sessionID</span></p> <div class="cnblogs_code"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">重新登录
重新登录
以上是cookie和session的会话和会话状态讲解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

“事件日志消息中的连接状态显示为待机状态:已断开连接,原因是符合NIC标准。这意味着系统在待机模式下,网络接口卡(NIC)已断开连接。虽然这通常是网络问题,但也可能由软件和硬件冲突引起。在接下来的讨论中,我们将探讨如何解决这一问题。”待机连接断开的原因是什么?NIC合规性?如果在Windows事件查看器中发现“ConnectivityStatusinStandby:DisConnected,Reason:NICCompliance”消息,这表示您的NIC或网络接口控制器可能存在问题。这种情况通常

陌陌这款广为人知的社交平台,为用户的日常社交提供了丰富的功能服务。在陌陌上,用户可以轻松分享生活状态、结交朋友、进行聊天等。其中设置状态功能让用户能够向其他展示自己当前的心情和状态,进而吸引更多人的关注和交流。那么究竟该如何设置自己的陌陌状态呢,下文中就为大家带来详细的内容介绍!陌陌怎么设置状态?1、打开陌陌,点击右下角更多,找到并点击每日状态。2、选择状态。3、即可显示设置的状态。

想要显示为“离线”或不想在WhatsApp上与您的朋友分享您的当前状态?有一个简单而巧妙的技巧可以做到这一点。您可以调整WhatsApp设置,以便您的朋友或其他人无法在其中看到您的当前状态(离线或上次看到)。如何在您的WhatsApp状态栏上显示为离线状态?这是一个非常简单和简化的过程。因此,请立即执行以下步骤。步骤1–在手机上打开WhatsApp。步骤2–点击⋮并选择打开“设置”。第3步–打开“隐私”设置以访问它。第4步–在该隐私页面上,打开“上次查看和在线”设置以访问该设置。步骤5–将“谁可

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。详细介绍:1、使用命令行工具,在Linux或Unix服务器上,可以使用命令行工具来查看服务器的状态;2、使用图形界面工具,对于具有图形界面的服务器操作系统,可以使用系统提供的图形界面工具来查看服务器状态;3、使用监控工具,可以使用专门的监控工具来实时监视服务器的状态等等。

深入了解Java线程的五种状态及其转换规则一、线程的五种状态介绍在Java中,线程的生命周期可以分为五个不同的状态,包括新建状态(NEW)、就绪状态(RUNNABLE)、运行状态(RUNNING)、阻塞状态(BLOCKED)和终止状态(TERMINATED)。新建状态(NEW):当线程对象创建后,它就处于新建状态。此时,线程对象已经分配了足够的资源来执行任务

在Slim框架中使用会话(Sessions)实现用户登录和注销的方法简介:会话(Sessions)是Web应用程序中常用的一种技术,它可以用来存储和管理用户相关的数据,例如用户的登录状态等。Slim框架作为一个轻量级的PHP框架,提供了简洁的API来处理会话。本文将介绍如何在Slim框架中使用会话来实现用户登录和注销的功能。安装Slim框架首先,我们需要在P

在Slim框架中使用会话(Sessions)进行用户认证的方法在Web应用程序中,用户认证是一个重要的功能,它确保只有被授权的用户可以访问受限资源。会话(Sessions)是一种常用的认证方法,通过存储用户身份和状态信息,确保用户在整个会话期间保持认证状态。Slim框架提供了方便的工具和中间件来处理会话和用户认证。下面我们将介绍如何在Slim框架中使用会话进

尊敬的读者朋友们,今天我们将为您精心奉上一篇关于Dubbo在Go语言方面的探讨文章。Dubbo作为一款优秀的分布式服务框架,在Java语言中得到了广泛的应用和支持。而随着Go语言在近年来的快速发展,许多开发者对于Dubbo是否已经支持Go语言这一问题产生了浓厚的兴趣。本文将从Dubbo在Go语言方面的支持情况、具体实现方法以及代码示例等方面展开阐述,希望能为
