`
tw5566
  • 浏览: 460677 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

php中session的处理机制 (转)

    博客分类:
  • php
阅读更多

1。
      PHP服务端默认的session存储是文件存放方式,在Windows上PHP默认的Session服务端文件存放在C:\WINDOWS\Temp下,可用session_save_path ('./t/');指定具体存放目录。

2。
      SESSION 的实现中采用COOKIE技术,SESSION会在客户端保存一个包含session_id(SESSION编号)的COOKIE;在服务器端保存其他 session变量,比如session_name等等。当用户请求服务器时也把session_id一起发送到服务器,通过session_id提取所保存在服务器端的变量,就能识别用户是谁了。同时也不难理解为什么SESSION有时会失效了。
     当客户端禁用COOKIE时(点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话 COOKIE”设为禁用),session_id将无法传递,此时SESSION失效。不过php5在linux/unix平台可以自动检查cookie 状态,如果客户端设置了禁用,则系统自动把session_id附加到url上传递。windows主机则无此功能

3。
Session_start() :开始一个会话或者返回已经存在的会话。
在使用Session_start()之前浏览器不能有任何输出,否则会发生以下错误。
你可以在php.ini里启动session.auto_start=1,这样就无需每次使用session之前都要调用session_start()。

4。
如果在session.auto_start=1,会让session_save_path ('./t/');变的无效。因为后一条语句须放前面。

5。
保存在服务器上的session文件,没有遇到session_destroy();,不会被删除。
即使客户端浏览器已关闭。
不过服务器端每次产生的session文件都能保证session文件名的随机性和唯一性。

6。http://www.toplee.com/blog/300.html

增加PHP的Session存储和处理能力

可能很多PHPer都用到了PHP提供的Session功能,可以方便的进行会话功能处理,PHP服务端默认的session存储是文件存放方式,在Windows上PHP默认的Session服务端文件存放在C:\WINDOWS\Temp下,*NIX下默认存放在/tmp下,如果说并发访问很大或者session建立太多,在这两个目录下就会存在大量类似sess_xxxxxx的session文件,同一个目录下文件数过多会导致性能下降,并且可能导致受到攻击最终出现文件系统错误。针对这样的情况,PHP本身体提供了比较好的解决办法。
  不少朋友可能都没有注意到php.ini里面Session设置部分中有这样一项:
;     session.save_path = "N;MODE;/path"


  这项设置提供给我们可以给session存放目录进行多级散列,其中“N”表示要设置的目录级数,“MODE”表示目录的权限属性,默认为600,在 WINDOWS上基本是不用设置的,*NIX上也可以不用设置,后面的“/path”表示session文件存放的根目录路径,比如我们设置为下面的格式
session.save_path = "2;/tmp/phpsession"

  上面的设置表示我们把/tmp/phpsession目录作为php的session文件存放根目录,在该目录下进行两级目录散列,每一级目录分别是0-9和a-z共36个字母数字为目录名,这样存放session的目录可以达到36*36个,相信作为单台服务器来说,这是完全够用了,如果说您的系统架构设计为多台服务器共享session数据,可以把目录级增加到3级或者更多。
  需要注意的是,php自己并不会自动创建子目录,需要您自己动手去创建,网上找到这样的自动创建目录的代码,大家可以做个参考。下面的代码自动创建3级子目录,可以自己动手根据需要进行修改。
<?php
set_time_limit(0);
$string = '0123456789abcdefghijklmnopqrstuvwxyz';
$length = strlen($string);
function makeDir($param)
{
    if(!file_exists($param)) {
        makeDir(dirname($param));
        mkdir($param);
    }
}
for($i = 0; $i < $length; $i++) {
    for($j = 0; $j < $length; $j++) {
        for($k = 0; $k < $length; $k++) {
            makeDir($string[$i].'/'.$string[$j].'/'.$string[$k]);
        }
    }
}
?>

  大家可能注意到前面的文字中提到了有关多服务器共享php的SESSION,这是很多应用都会遇到的问题,网上也有不少相关的资源,大家可以去google一下,Michael这里只提一下大概的思路。
  一般来说我们用到最多的方法有两种:
  1、NFS或者Samba共享的方法,让各个服务器上存放session文件的磁盘共享,这种方法简单可行。
  2、集中存储到数据库中,这是比较多的实现方法,通过php提供的session_set_save_handler()函数来重定义session函数,推荐使用这种方法。

转自:http://www.phpweblog.net/fuyongjie/archive/2009/06/09/6687.html

分享到:
评论

相关推荐

    PHP Session处理及应用实例.pdf

    PHP Session 处理机制是 B/S 结构的程序设计中的一种解决方案,用于保存用户的状态信息和业务运行状态。Session 是一种服务器端的机制,用于保存用户的状态信息和业务运行状态。PHP 的 Session 处理机制可以方便地...

    PHP中session全面教程

    ### PHP中的Session全面教程 #### 一、Session概念解析 在深入探讨PHP中Session的具体用法之前,我们首先需要理解Session到底是什么以及它为何如此重要。 **1.1 Session的基本定义** Session是一种用来追踪用户...

    PHP中session全面教程.txt

    ### PHP中的Session全面教程 #### 一、Session概念与作用 在Web开发中,由于HTTP协议本身是无状态的,即服务器无法记住客户端用户的状态信息,因此为了...希望本文能够帮助您更好地理解和运用PHP中的Session机制。

    php session登录

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

    php session操作类

    10. **错误处理与日志**:类可能有内置的错误处理机制,当Session操作出现问题时,能够记录错误信息并提供有用的反馈。 在实际开发中,这样的Session操作类可以方便地集成到项目中,统一管理Session,提高代码的...

    php中精确控制session超时时间

    总结来说,要严格控制PHP中的session过期时间,需要综合考虑客户端cookie的生命周期、服务器端的垃圾回收机制以及代码层面的session检查。理解这些机制可以帮助开发者更好地管理和维护用户的会话状态,提供更加安全...

    php mysql数据库 存储session

    1. **配置session处理**:修改PHP的session配置,设置session.save_handler为"sql_session"(假设我们有一个自定义的session处理器),并且设置session.save_path为数据库连接字符串。 2. **创建session表**:在...

    php写的session购物车

    为了解决这个问题,PHP提供了session机制。当用户访问网站时,服务器会生成一个唯一的session ID,并将其存储在用户的浏览器cookie中。每当用户发送请求时,这个session ID会被一起发送,服务器通过这个ID找到对应...

    PHP Session的配置与应用

    3. **自定义Session处理**:如果需要更高级的控制,可以注册回调函数来处理Session的开始、结束、写入和解码等操作。例如,使用`session_set_save_handler()`定义自定义的会话存储机制。 三、使用PHP Session 1. *...

    php清除session

    在PHP编程中,Session是用于跟踪用户状态的一种机制,它在用户访问网站的不同页面时保持数据。当用户登录系统时,通常会创建一个session来存储用户的登录信息,如用户名、用户ID等。然而,有时在处理PHP Session时,...

    php跨域提交及伪造SeSSION

    在PHP编程中,跨域(Cross-Origin)和伪造SESSION(Session Hijacking)是两个重要的安全概念,它们都与Web应用程序的安全性密切相关。本篇文章将详细解释这两个概念,并提供相关的解决方案和预防措施。 首先,让...

    PHP实现多服务器session共享之memcache共享.rar

    3. **session管理**:由于memcache本身不处理session过期和清理,所以需要在PHP代码中设定合适的session生命周期(`session.cookie_lifetime`和`session.gc_maxlifetime`)以及定期清理策略。 4. **处理并发问题**...

    php中将session保存到数据库的函数类代码

    在PHP开发中,Session是用于跟踪用户状态的一种机制,它在服务器端存储用户信息,而不仅仅是像Cookie那样在客户端存储。然而,系统默认情况下,PHP会将Session数据保存在文件系统中,这在多服务器环境或者高并发场景...

    PHP中Session的概念

    总的来说,PHP中的Session是处理Web应用程序中用户状态管理的关键工具,它允许开发者在多个页面之间传递数据,提供了跨页面通信的能力,极大地简化了用户认证、购物车、个性化设置等复杂功能的实现。了解和熟练掌握...

    php session阻塞页面分析及优化

    - **MySQL**:可以将Session数据存储在MySQL数据库中,利用数据库本身的事务管理机制解决锁的问题。 - **其他NoSQL数据库**:如MongoDB等,具有较好的扩展性和高性能。 #### 四、结论 针对PHP Session阻塞问题,...

    php实现主界面登陆 退出session

    PHP的`session`机制用于存储用户会话数据。一旦用户成功登录,你可以启动一个新的会话,并将用户的ID或其他标识符存储在`$_SESSION`全局变量中,以便后续页面可以识别用户的身份。例如: ```php session_start(); $...

    php_session与cookie会员登录验证实例

    在本文中,我们将深入探讨PHP中的Session和Cookie技术,以及如何使用它们进行会员登录验证。首先,让我们理解这两个概念。 **PHP Session**: Session是PHP提供的一种机制,用于在用户的不同页面请求之间存储数据。...

    老外session实例购物车

    在Web开发中,PHP Session是用于跟踪用户状态的一种机制。这个"老外session实例购物车"项目就是一个基于PHP的简单购物车实现,利用Session来存储用户添加的商品信息,从而在用户浏览不同页面时保持购物车的状态。...

    处理session跨域几种方案

    - 使用自定义Session处理类,如上述的`Session`类,覆盖默认的PHP Session操作,实现Session数据的读写。在这个例子中,类定义了`open()`、`close()`、`read()`和`write()`等方法,以便与数据库交互。 4. **API...

    (转)讲解各种session

    在计算机编程特别是Web开发中,Session是用于跟踪用户状态的一种机制。它是服务器端存储用户信息的方式,确保用户在不同页面请求间维持某种状态。本篇文章将深入探讨Session的工作原理、类型以及如何在不同编程语言...

Global site tag (gtag.js) - Google Analytics