多
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 文件。你可以用隐含表单的域来保存它。