目录
一、会话概述" >一、会话概述
二、Cookie" >二、Cookie
三、HttpSession" >三、HttpSession
1. 概念" >1. 概念
2. Session的创建" >2. Session的创建
3. Session对象的销毁" >3. Session对象的销毁
4.Session相关方法" >4.Session相关方法
5.URL重写实现Session跟踪" >5.URL重写实现Session跟踪
首页 Java java教程 cookie和session的会话和会话状态讲解

cookie和session的会话和会话状态讲解

Jul 17, 2017 pm 02:30 PM
会话 状态

一、会话概述

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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

处于待机状态的连接状态:已断开,原因:NIC合规性 处于待机状态的连接状态:已断开,原因:NIC合规性 Feb 19, 2024 pm 03:15 PM

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

陌陌状态怎么设置 陌陌状态怎么设置 Mar 01, 2024 pm 12:10 PM

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

如何在安卓手机上的WhatsApp上离线显示 如何在安卓手机上的WhatsApp上离线显示 Jul 14, 2023 am 08:21 AM

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

如何查看服务器状态 如何查看服务器状态 Oct 09, 2023 am 10:10 AM

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

Java线程的五种状态详解及状态转换规则 Java线程的五种状态详解及状态转换规则 Feb 19, 2024 pm 05:03 PM

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

在Slim框架中使用会话(Sessions)实现用户登录和注销的方法 在Slim框架中使用会话(Sessions)实现用户登录和注销的方法 Jul 28, 2023 pm 11:21 PM

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

在Slim框架中使用会话(Sessions)进行用户认证的方法 在Slim框架中使用会话(Sessions)进行用户认证的方法 Jul 28, 2023 pm 05:57 PM

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

精品阐述:Dubbo是否已经支持Go语言 精品阐述:Dubbo是否已经支持Go语言 Mar 25, 2024 am 09:42 AM

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

See all articles