我最近切换到使用我们的数据库为我们的用户管理PHP会话。我实现的数据库会话处理程序大部分与this one相同。
话虽如此,我遇到了一些奇怪的行为。在单页加载时,PHP会话ID正在改变几个不同的时间。例如,下面的输出在我的_write
session_set_save_handler()
调用中使用file_put_contents在一次页面加载期间写入文件。
我搜索了代码,session_regenerate_id()
从未被调用,session_id(<new_id>)
也未被调用。此外,我的php.ini将session.auto_start设置为Off
。基本上,我不知道在给定上述事实的情况下,会话ID如何在一个页面加载中发生变化。
我注意到它的原因是因为链接到网页的REPLACE INTO
SQL语句在我的数据库中创建了8行(每个额外的一行,不同的会话ID)。如您所见,其中一个重复了四次左右。这恰好是唯一一个在放入数据库时也具有与之关联的数据的会话ID。
f951tbvjkc8c5mv25aakfhoq86
f951tbvjkc8c5mv25aakfhoq86
f951tbvjkc8c5mv25aakfhoq86
f951tbvjkc8c5mv25aakfhoq86
eodjh2vhuo5ni1b7ia5ro6itf7
bada69955ld96fks0g057pp7i2
4n4c00ddlolb9k2t3uh2h66v37
lsqhhmfsund3bp3ocotcrj0l05
qvfe3qp6nupokcncp8jja8tsk0
4qfp9m3knabs88t6n1fkjo8oq6
g52du9v2fcsak27tjo7519q7j0
值得注意的是,我正在加载的页面中有一些AJAX请求到我们自己的服务器。此外,我们网站上的所有页面加载都不会发生此行为。到目前为止,我已经将它缩小到这一页,它产生了一些不同的AJAX请求。
思想?
更新:我的服务器中有以下vhost作为自定义域的通配符。注释掉的线路是我认为导致它的原因。当我发表评论时,似乎工作正常。在那里,它似乎导致了奇怪的行为。
<VirtualHost *:80>
DocumentRoot "/opt/local/www/mysite.com"
ServerName default
ServerAlias *
ErrorLog "/opt/local/apache2/logs/mysite.com-error.log"
CustomLog "/opt/local/apache2/logs/mysite.com-access.log" common
<Directory "/opt/local/www/mysite.com">
AllowOverride All
php_value session.save_path "/opt/local/www/mysite.com/sessions"
#php_value session.cookie_domain "mysite.local"
php_value auto_prepend_file "/opt/local/www/mysite.com/core.php"
</Directory>
</VirtualHost>