background image

php 服务器实现多 session 并发运行的方法

首先介绍一下

session 的概念:所谓 session 是微软首先提出的,在 asp 中最先集成。由

session 的采用,大大方便了 web 开发员的工作。一时间 asp 风靡全球。现在 php4 也加入

session 的支持,再度显示出 open source 的强大力量。和 Cookie 类似,设计 Session 的目的也
是为了在一个访问期间在不同的页面间传输数据以解决

http 协议无状态的问题,但 Session

更加简单、更加安全。

Session 中文没有一个统一的译法,我习惯上译为会话。关于 session 的

意义大家都应该清楚

: 其实是在浏览某个网站时,在浏览器没有关闭的情形之下,一个 web

应 用 的 开 始 和 结 束 。 一 个

session 可 以 包 括 数 次 http 的 请 求 和 应 答 , 比 如 我 们 用

freemail.263.net,从 login 到 logout 或者超时就作为一个 session 的生存期。每一个被创建的
Session 都有一个唯一的标识串,叫 session ID , 这个串被发送到客户端,同时在服务器端也
生成了同样唯一的标识串入口,这个标识串或者放在文本文件中,或者放在一个数据库中。

然后程序可以在这个

sessionID 下注册一些 Session 变量。这些变量如同一般的变量一样可以

保存文本或数值信息,可以通过

Session 被读出或写入。 session 的唯一标识一般是在系统内

部唯一的

session ID,一般是一个挺长的字符串。

问题的提出:了解

session 概念后,我在为我单位编写一个进销存系统中发现需要让多

个用户可以同时进入一个

php 应用程序。原来设计的静态的唯一的 session ID 导致数据混乱。

这样,动态生成一个唯一的

session ID 成为当务之急。  

解决办法很简单:我用了

php 文件名+时间戳为唯一的 session ID,这样在我的程序中的

每个

session 就各就各位,不再混乱了。下面把我的源代码公布,方便也有同样的问题的朋

友多一个解决方法。

//Start a PHP session to preserve variables.      

if ( empty($mysessionname) ) {         
$micro = microtime();        
$micro = str_replace(" ","",$micro); // strip out the blanks        
$micro = str_replace(".","",$micro); // strip out the periods        
$mysessionname = "po_maint" . $micro;      
}     
 

session_name($mysessionname);      

session_start();
程序注释:用

mysessionname 为页面间唯一的 sessionname 传递变量,如果你也用到这

个名字必须把上述程序做个小小的改动。

Mysessionname 不能为 session 的内部变量名,因为

他在

session 开始之前就已经存在了。Mysessionname 也不能用 cookie 方式存放,因为多个

session 肯定会覆盖掉原先的 cookie 文件。你可以用隐含表单的域来保存它。