我正在使用PHP中的会话,并在单个域上有不同的应用程序。问题是,cookie是特定于域的,因此会话ID将发送到单个域上的任何页面。(我不知道是否有一种使cookie工作方式不同的方法)。因此,在此域上的每个页面上都可以看到会话变量。
我正在尝试实现自定义会话管理器以克服这种行为,但我不确定我的想法是否正确。
我想完全避免PHP会话系统,并创建一个全局对象,它将存储会话数据,并在脚本结束时将其保存到数据库中。
1. 在首次访问时,我将生成唯一的session_id并创建一个cookie。 2. 在脚本结束时,使用session_id、会话开始时间戳和最后访问时间戳以及来自$_SERVER的数据(例如REMOTE_ADDR、REMOTE_PORT、HTTP_USER_AGENT)保存会话数据。 3. 在每次访问时,检查数据库中的从客户端发送的session_id cookie,检查IP、端口和用户代理(用于安全),并将数据读入会话变量(如果没有过期)。 4. 如果session_id已过期,则从数据库中删除。
该会话变量将被实现为单例模式(我知道会与此类产生紧密耦合,但我不知道是否有更好的解决方案)。
我正在尝试获得以下好处:
- 另一个服务器上的另一个脚本中不可见的会话变量 - 自定义会话过期管理 - 查看打开的会话的方法(类似于在线用户列表)
我不确定是否忽略了此解决方案的任何缺点。是否有更好的方法?
谢谢!
我正在尝试实现自定义会话管理器以克服这种行为,但我不确定我的想法是否正确。
我想完全避免PHP会话系统,并创建一个全局对象,它将存储会话数据,并在脚本结束时将其保存到数据库中。
1. 在首次访问时,我将生成唯一的session_id并创建一个cookie。 2. 在脚本结束时,使用session_id、会话开始时间戳和最后访问时间戳以及来自$_SERVER的数据(例如REMOTE_ADDR、REMOTE_PORT、HTTP_USER_AGENT)保存会话数据。 3. 在每次访问时,检查数据库中的从客户端发送的session_id cookie,检查IP、端口和用户代理(用于安全),并将数据读入会话变量(如果没有过期)。 4. 如果session_id已过期,则从数据库中删除。
该会话变量将被实现为单例模式(我知道会与此类产生紧密耦合,但我不知道是否有更好的解决方案)。
我正在尝试获得以下好处:
- 另一个服务器上的另一个脚本中不可见的会话变量 - 自定义会话过期管理 - 查看打开的会话的方法(类似于在线用户列表)
我不确定是否忽略了此解决方案的任何缺点。是否有更好的方法?
谢谢!
我看到在这种环境下部署应用程序将会有另一种安全威胁,我想要做的是最好的隔离,并且默认的会话处理似乎过于危险,不适合这样的使用。
因此我的问题是,如果您发现我的设计中存在比默认会话管理更不安全、更不灵活的东西..
感谢您的回答,..