gpt4 book ai didi

PHP: session 和 mysql_pconnect() 都继续启动新的 session /进程

转载 作者:行者123 更新时间:2023-11-29 00:52:31 25 4
gpt4 key购买 nike

写了这么多文字只是想提前道歉。这是问题所在:我使用持久连接连接到数据库,wait_timeout 为 60 秒,并将 session 数据存储在 MySQL 表中。我遇到的问题是 session 似乎不使用它们自己的行;每次页面刷新都会启动一个新 session ,而不是使用旧 session 。更重要的是,前面提到的持久连接会不断启动新进程,而不是按应有的方式使用它们自己的进程。由于这两个问题似乎同源,所以我决定把它们放在一起。我的 PHP 代码如下:

( View it on Pastebin )

mysql_pconnect('localhost', 'root') or die('无法连接: ' . mysql_error()); mysql_set_charset('utf8');
mysql_select_db('azgoth') or die('Could not choose DB: ' . mysql_error());

session_set_cookie_params(3600,'/','www.azgoth',FALSE,TRUE);
session_set_save_handler('_open','_close','_read','_write','_destroy','_clean');

function _open(){
return true;}

function _close(){
return true;}

function _read($id){
$id = mysql_real_escape_string($id);
if ($result = mysql_query("SELECT data FROM sess_en WHERE id='$id'")) {
if (mysql_num_rows($result)) {
$record = mysql_fetch_assoc($result);
return $record['data'];}}
return '';}

function _write($id, $data){
$access = $_SERVER['REQUEST_TIME'];
$id = mysql_real_escape_string($id);
$access = mysql_real_escape_string($access);
$data = mysql_real_escape_string($data);
return mysql_query("REPLACE INTO sess_en VALUES('$id', '$access', '$data')");}

function _destroy($id){
$id = mysql_real_escape_string($id);
return mysql_query("DELETE FROM sess_en WHERE id='$id'");}

function _clean($max){
$old = $_SERVER['REQUEST_TIME'] - $max;
$old = mysql_real_escape_string($old);
return mysql_query("DELETE FROM sess_en WHERE access<'$old'");}
session_start();

关于可能导致此问题的原因有什么想法吗?

编辑:起初我以为它只是在我的脑海里,但我现在可以证实这一点:这个奇怪的东西不断随机出现:它通常会出现,但有时(实际上很少)不会..

最佳答案

每次都启动新 session 的问题可能是因为你传递给session_set_cookie_params()的domain参数。您已通过 www.azgoth,大概是因为您拥有多个顶级域 (TLD),并且您希望在所有顶级域之间共享 cookie。这是不允许的。根据您的设置,TLD 是 azgoth,这是(目前)不可能的,因此 cookie 将无效并且永远不会被发送回服务器,因此每次都会启动一个新 session 时间。

持久性数据库问题可能与服务器配置有关。 PHP 手册指出,在 mysql_pconnect() 的页面上:

Note, that these kind of links only work if you are using a module version of PHP. See the Persistent Database Connections section for more information.

...和...

Using persistent connections can require a bit of tuning of your Apache and MySQL configurations to ensure that you do not exceed the number of connections allowed by MySQL.

关于PHP: session 和 mysql_pconnect() 都继续启动新的 session /进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7780491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com