因此,当用户访问将查询其资产管理系统的页面时,会话调用该特定数据库的ID。
最近,我遇到了很多与会话变量相关的问题。有时仅在应用程序的生命周期内创建一个会话文件,有时每个会话请求都会导致新的会话ID(仍然没有找出原因!)。
我的问题是这样的。有没有其他方法可以替代使用会话变量?像全局变量或其他方式?
关于我的会话问题,我有一个问题打开在这里 - PHP session variables not being maintaned
另一个选择是将会话数据存储在数据库中,并为用户提供带有您的session_id的cookie。这将使您对会话拥有更多的控制。
替代会话的方法是使用 cookie(事实上,通常使用 cookie 实现会话)。但是只有在您想要存储 小 量数据时才应该使用 cookie。
对于这个问题,会话似乎是正确的解决方案。 通常情况下,会话的工作方式如下: 在服务器上创建一个会话对象并分配一个ID。将该ID作为cookie发送到浏览器,并随着浏览器请求发送到服务器,从而使服务器能够从内存中获取正确的会话对象。
您可能需要查看会话的配置方式。如果您不断“丢失”会话,可能的原因之一是您在子域之间“跳转”,并且会话cookie仅设置为一个子域。另一个原因可能是您的会话过期时间太短。
Cookie并不是一个真正的替代品,特别是在用于登录时,因为用户可以更改它们,而对于会话只需在计算机上存储包含标识哈希的cookie,修改它们将无济于事。
无论如何,会话是有效的。毫无疑问,您的问题是实现问题。我建议您花些时间进行调试和测试,因为实施另一种方法将导致非常复杂的代码 - 而且您不想这样做,因为会话已经给您带来了麻烦。
对于在每个请求中重新创建的会话,您应该尝试调试服务器发送给您的 cookie。 在这些 cookie 中,检查 cookie 域是否正确(以及检查 cookie 路径)。
要调试 cookie,可以使用 Web 开发人员工具栏来显示页面加载后活动的 cookie。但是最好的工具是 Live Http headers,检查服务器发送的真实标头,在那里您将找到真正的 cookie 内容,如果 cookie 域存在不匹配(例如 - 但大多数情况下是这样),您的浏览器将不会为您的网站存储此 cookie。
如果您的浏览器忽略 cookie,则您请求 PHP 将构建另一个会话等。
如果无法使 cookie 系统正常工作,则可以跟踪在 PHP 中跟踪会话 ID 的旧方法,即使用带有 PHPSESSID 的永久 get 和/或 post 参数。 您需要在 PHP 编译时启用 --enable-rans-id(在 phpinfo 页面上检查)http://www.php.net/manual/en/session.idpassing.php。