我的目标是在请求之间共享会话,我的意思是每个请求都可以访问数据。首先,我认为简单地通过文件系统共享可能会很好,但我自己发现了这一点:
session_id('0');
session_start();
echo session_id();
var_dump ($_SESSION);
if (!isset($_SESSION['x']))
{
$_SESSION['x'] = 0;
}
$_SESSION['x']++;
var_dump ($_SESSION);
这样我可以从浏览器中看到相同的内容。我的问题是,这是一个好习惯吗?
编辑:这是完整的工作版本:
$m = microtime(true);
session_start();
if (session_id() == '0') // this happens when somehow our session id sticks, it should not happen ever, but if so, lets erase it
{
setcookie (session_name(), '', time() - 3600);
session_destroy();
session_write_close();
echo 'reload'; die;
}
if (!isset($_SESSION['x']))
{
$_SESSION['x'] = 0;
}
$_SESSION['x']++;
$saveId = session_id();
session_write_close();
// switch to common storage
session_id('0');
session_start();
if (!isset($_SESSION['common']))
{
$_SESSION['common'] = 0;
}
$_SESSION['common']++;
session_write_close();
// back to our own session
session_id($saveId);
session_start();
echo $_SESSION['x'].'<br>'.(microtime(true) - $m); die;
我不太浪费时间。
答案 0 :(得分:1)
了解SESSION
是否是放置此数据的正确位置很棘手,但值得记住一些事情。
SESSION
旨在存储与单个用户访问您网站相关的数据(通常由于会话ID存储在客户端Cookie中而被区分为计算机和浏览器的组合) 总而言之,您可能会发现使用会话的性能会比检查文件的存在还要慢(根据PHP的工作,这比使用会话更简单)。 / p>
也就是说,如果你写到那个文件,那么你只会遇到并发问题,你必须以与以下相同的方式解决这个问题。无论如何,php会话都会。
我要说,如果您要写数据,请查看您的数据库。这是他们为之设计的。
如果您不想写入主数据库且有充分理由,那么可以考虑使用memcache DB或其他二级存储。