`

PHP SESSION 机制解惑 (一)

阅读更多

一、PHP session原理

    session是在服务器端保持用户会话数据的一种方法,对应的cookie是在客户端保持用户数据。HTTP协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系,那么服务器是如何记住众多用户的会话数据呢?首先要将客户端和服务器端建立一一联系,每个客户端都得有一个唯一标识,这样服务器才能识别出来。

    当我们在代码中调用session_start()时,服务器端先生成一个唯一的SESSIONID和默认值为"PHPSESSID"的session name(可以通过php.ini修改session.name值指定),再在我们服务器的默认目录(可通过修改session.save_path参数改变保存session的目录)下生成一个session文件(文件名格式为sess_{SESSIONID}),同时向客户端发送HTTP头:header('Set-Cookie:session_name()=session_id(); path=/'),在客户端生成一个cookie。

SESSION文件:

cookie:



    用户发送请求时,客户端将session id传递到服务器,服务器根据session id找到对应的文件,读取的时候对文件内容进行反序列化就得到session的值,保存的时候先序列化再写入。

 

二、使用session之前为什么必须先执行session_start()

    了解的原理之后,所谓的session其实就是客户端一个session id服务器端一个session file,新建session之前执行session_start()是告诉服务器要种一个cookie以及准备好session文件,要不然你的session内容怎么存;读取session之前执行session_start()是告诉服务器,赶紧根据session id把session文件反序列化。

    只有一个session函数可以在session_start()之前执行,session_name():读取或指定session名称(比如默认的就是”PHPSESSID”),这个当然要在session_start之前执行。

 

三、禁用cookie时通过URL传送session ID

    如果用户关闭了cookie,那么session就完全没法工作了。PHP可以在cookie被禁用时自动通过GET方式跨页传递SESSIONID,前提是设置php.ini的session.use_trans_sid为1。这时当我们在客户端禁用了cookie时使用了session,并在当前页面通过点击链接到另一页面时,PHP会自动在链接上添加SESSIONID参数,像这样:nextpage.php?SESSIONID=2bd170b3f86523f1b1b60b55ffde0f66。

 

四、session的同步

    我们可能有很多台服务器,用户在A服务器上登录了,种下了session信息,然后访问网站的某些页面没准跳到B服务器上去了,如果这个时候B服务器上没有session信息又没有做特殊处理,可能就会出问题了。session同步有很多种,如果你是存储在memcached或者MySQL中,那就很容易了,指定到同样的位置即可,如果是文件形式的,你可以用NFS统一存储。

还有一种方式是通过加密的cookie来实现,用户在A服务器上登录成功,在用户的浏览器上种上一个加密的cookie,当用户访问B服务器时,检查有无session,如果有当然没问题,如果没有,就去检验cookie是否有效,cookie有效的话就在B服务器上重建session。这种方法其实很有用,如果网站有很多个子频道,服务器也不在一个机房,session没办法同步又想做统一登录那就太有用了。

 

当然还有一种方法就是在负载均衡那一层保持会话,把访问者绑定在某个服务器上,他的所有访问都在那个服务器上就不需要session同步了,这些都是运维层面的东西。

  • 大小: 1.6 KB
  • 大小: 3.3 KB
分享到:
评论

相关推荐

    Cookie、Session机制详解.doc

    Session机制是另一种跟踪用户会话的技术,Session通过在服务器端记录信息确定用户身份。Session机制可以弥补Cookie的缺点,但是Session机制也存在一些问题,例如Session的过期问题和Session的安全性问题。 在Web...

    Cookie机制和Session机制

    为了解决这一问题,开发了两种主要的状态管理机制:Cookie机制和Session机制。 #### 二、术语解释:Session 在不同的上下文中,"session"这个词有着不同的含义,尤其是在网络通信和Web开发领域。通常,"session...

    cookie机制和session机制的区别

    Session是在服务器端维护的一种会话管理机制,用于跟踪用户在一个会话过程中的状态。当一个用户连接到服务器,服务器会为这个用户创建一个唯一的Session ID,并将此ID存储在Cookie中返回给客户端。此后,每次用户...

    Cookie与Session机制

    【Cookie与Session机制】在Web开发中,会话跟踪是必不可少的技术,用于区分不同用户的操作。常见的会话跟踪手段有Cookie和Session。Cookie是通过在客户端存储信息来识别用户身份,而Session则是在服务器端存储信息来...

    cookie机制和session机制的区别.docx

    session 机制则是一种服务器端保持状态的方案。它通过在服务器端存储用户的会话信息,来跟踪用户的会话信息。session 机制通常需要借助于 cookie 机制来达到保存标识的目的,但实际上还有其他选择。 在 cookie 机制...

    山石网科防火墙session机制.xlsx

    山石网科防火墙session机制

    Cookie与session机制详解

    ### Cookie与Session机制详解 #### 一、Cookie与Session的概念及区别 在Web开发中,为了保持用户的状态信息,通常会用到两种技术:Cookie和Session。这两种技术都是用来跟踪用户的浏览活动,但它们的工作原理有所...

    session机制与cookie机制(来源于IT168)

    session机制是服务器端保持状态的一种方法。服务器创建一个session对象,存储用户的相关信息,并分配一个唯一的session ID。这个ID通过cookie发送给客户端,之后客户端每次请求时携带这个ID,服务器据此找到相应的...

    cookie机制和session机制的区别.

    ### Cookie机制与Session机制的区别 #### 一、概念解析 **Cookie** 和 **Session** 是两种常见的用于在Web应用程序中维护用户状态的技术。 - **Cookie**:是一种客户端存储技术,服务器可以通过HTTP响应向客户端...

    PHP中Session机制的研究与应用.pdf

    Session 机制是 PHP 中的一种重要机制,用于记录用户信息,提供了一个安全、可靠的方式来跟踪和识别用户。 知识点: 1. Session 机制是指跟踪和识别用户的机制,用于记录用户信息。 2. Session 是一种特定时间概念...

    session机制详解

    一、术语session 二、HTTP协议与状态保持 三、理解cookie机制 四、理解session机制 五、理解javax.servlet.http.HttpSession 六、HttpSession常见问题 七、跨应用程序的session共享 八、总结

    理解session机制

    Session机制是Web开发中用于维持客户端(浏览器)与服务器之间状态的一种技术。在HTTP协议中,由于其无状态性,每次请求之间不会共享任何信息,因此,为了实现用户登录状态的保持或者其他需要跟踪用户行为的功能,就...

    session机制,专门针对session做的

    【session机制】是一种在Web应用程序中用于保持客户端与服务器之间状态的技术。在Web开发中,由于HTTP协议本身的无状态性,即服务器不保留关于客户端的任何信息,每次请求都被视为独立的事务。为了实现诸如购物车、...

    重写session机制,将session写入数据库,建表和注释写的都很清晰,已测试

    重写session机制,默认session是以临时文件形式存储在服务器,将session写入数据库,建表和注释写的都很清晰,已测试

    php session登录

    在PHP编程中,Session是一种非常重要的机制,用于在用户的不同页面请求之间保持状态。它允许开发者存储用户信息,如登录状态、购物车内容等,即使用户在网站上浏览不同的页面,也能保持这些信息的连续性。现在我们来...

    Cookie与Session机制.doc

    Cookie 与 Session 机制 Cookie 机制是 Web 程序中常用的技术,用来跟踪用户的整个会话。Cookie 通过在客户端记录信息确定用户身份。下面是 Cookie 机制的详细说明: 1. 什么是 Cookie? Cookie 意为“甜饼”,是...

    PHP的session基础

    在Web开发中,PHP的Session机制是一种非常重要的用户状态管理工具,它允许开发者在用户的浏览器会话之间存储数据,确保在不同页面间传递信息。本篇文章将深入探讨Session的工作原理以及其在实际应用中的操作。 ### ...

    Servlet Session机制详解

    Servlet Session机制详解,如题,详细描述Session的原理,及使用方法,附部分代码

    session的跟踪机制

    ### Session的跟踪机制详解 #### 一、Session与Cookie的区别 在Web开发中,Session 和 Cookie 是两种常用的技术,用于维护客户端与服务器之间的状态信息。它们各有特点,在不同的场景下发挥着重要作用。 - **...

    详解php设置session(过期、失效、有效期)

    在PHP中,Session是一种非常重要的会话管理机制,它允许开发者在用户的不同页面请求之间保持状态。本篇文章将深入探讨如何在PHP中设置Session,包括过期、失效以及有效期的管理。 首先,让我们关注`session.save_...

Global site tag (gtag.js) - Google Analytics