我正在使用PHP中的会话,我在单个域上有不同的应用程序.问题是,cookie是特定于域的,因此会话ID被发送到单个域上的任何页面.(我不知道是否有办法让cookie以不同的方式工作).因此,会话变量在此域的每个页面中都可见.我正在尝试实现自定义会话管理器来克服这种行为,但我不确定我是否正在考虑它.
我想完全避免PHP会话系统,并创建一个全局对象,它将存储会话数据,并在脚本结束时将其保存到数据库.
该会话变量将实现为单例(我知道我会与这个类紧密耦合,但我不知道更好的解决方案).
我想获得以下好处:
我不确定我是否忽视了这个解决方案的任何缺点.有没有更好的方法?
谢谢!!
更新: 我没有详细解释它并在这里造成很多混乱,所以我想更清楚我正在处理的事情:
我正在构建SOA服务器应用程序,它将部署在许多不同的环境中.它不会拥有自己的网络服务器,因此在这些环境中可能会有另一个PHP应用程序.这些公司的员工将在此应用程序中拥有用户帐户,因此他们将获得具有会话ID的cookie到此应用程序中.
众所周知,在加载会话数据时运行PHP的webserver没有区别(至少在默认情况下)从哪个目录创建会话的脚本.它只需要一个会话ID.此会话ID随客户端到服务器的每个请求一起发送.从你的答案我得到了一个方法,PHP如何限制某些目录的cookie,但恶意用户能够编辑cookie,因为它存储在他的计算机中.在我的情况下,恶意用户可以访问在同一环境中编写和执行php脚本,尽管无法访问我的应用程序及其数据库.如果他创建了一个脚本,他可以使用我的应用程序的cookie中的Session id,这样他就可以访问我的应用程序上的会话数据,并访问我应用程序的部分内容,他不应该被允许访问.
我看到在这样的环境中部署应用程序会有另外的安全威胁,我想要的是我能做的最好的隔离,默认的会话处理似乎太危险了,不适合这样的用途.
所以我的问题是,如果你看到的东西比我的默认会话管理更安全,设计灵活性更低.
谢谢您的回答,..
看看session_set_save_handler
PHP 中的方法。
http://php.net/manual/en/function.session-set-save-handler.php
好吧,事实上,一些公司使用自定义会话处理程序的方法来进行多域、分布式内存/数据库支持的会话处理