将PHP会话从一个目录传递到另一个目录在public_html中并行创建
我在将PHP会话从一个目录传递到另一个目录在public_html中并行创建,php,mysql,session,session-variables,session-cookies,Php,Mysql,Session,Session Variables,Session Cookies,我在public\uhtml目录中有3个基本目录。例如: 目录A表示 目录_B表示 目录C表示 我在public\u html中有另一个名为Sessions的目录,当登录的用户跨目录(站点和子站点)访问时,我想在其中保存会话cookies 所附图片在cPanel中清楚地展示了我的目录结构。 在目录\u A中的文件夹和子文件夹之间传递会话没有问题。当访问者从目录A切换到目录B或目录C(从访问到或)时,问题就出现了。尽管我在上述子站点的每一页中设置了变量session\u set\u cookie
public\uhtml
目录中有3个基本目录。例如:
public\u html
中有另一个名为Sessions
的目录,当登录的用户跨目录(站点和子站点)访问时,我想在其中保存会话cookies
所附图片在cPanel中清楚地展示了我的目录结构。
在目录\u A
中的文件夹和子文件夹之间传递会话没有问题。当访问者从目录A
切换到目录B
或目录C
(从访问到或)时,问题就出现了。尽管我在上述子站点的每一页中设置了变量session\u set\u cookie\u params
,但会话根本不会被传递
$mysession = session_name("mysession");
session_set_cookie_params(0, '/', '.site.com');
session_start();
值得注意的是,当前变量session.save_path
在我的PHP
服务器上具有以下配置
session.save_path /tmp /tmp
现在,由于会话根本没有从public\u html
中的一个目录传递到另一个目录,我更改了session.save\u path的配置,将路径指向public\u html/sessions
like
session.save_path /public_html/Sessions /public_html/Sessions
当访问者访问这些站点时,上述配置更改会在的每个页面中返回类似警告
Warning: session_start() [function.session-start]: open(/public_html/session/sess_0d38g21b3153bb4343g8d687442e76ed, O_RDWR) failed: No such file or directory (2) in /home/user/public_html/Directory_B/index.php on line 4
在第4行,如上面的警告所述,我得到了代码session_start()代码>
这里怎么了?发生这种情况是因为服务器配置不当吗?如何将会话从一个目录正确地传递到另一个目录
关于这个问题的任何想法或知识都将受到赞赏。之所以发生这种情况,是因为/tmp
中存在的旧会话您没有复制它们。这也可能意味着您没有将目录/文件的权限设置为能够被Web服务器读取您需要使用自定义会话处理程序将会话存储在数据库中,而不是使用文件系统中的目录(例如/tmp)
下面是一些示例代码:,以及有关在PHP中使用自定义会话处理程序的更多信息
将会话保存到数据库中时,只要可以连接到数据库,就可以从任何站点访问会话。这比听起来简单
session_set_cookie_params(0, '/', '.site.com');
session_start();
到
您不应该将会话数据保存在我可以使用浏览器访问的文件夹中。它应该在public_html文件夹之外的某个地方,或者至少在它下面。@riggsfully感谢您宝贵的评论。是的,你是对的,在这种情况下,可能有会话劫持的可能性。我只是在用一种非常基本的方法。谢谢。在这种情况下,会话ID
是否附加到查询字符串中?我希望避免查询字符串中出现会话ID
。我将花时间了解更多。谢谢你宝贵的评论。在这种情况下,我是否应该将public_html
中的Session
文件夹“chmod”到0777
中?您将Session暴露在Web服务器可读的目录上,从而在系统中造成很大的安全风险谢谢您的指导。虽然我觉得可以在php.ini
中配置相同的路径,但我还是会尝试一下,这样更方便。。你疯了吗?@edwardmp实际上Goutam-Pal
明白我的意思。我在问题中描述的目录结构只是一个简单易懂的示例。@edwardmp在公共目录或任何其他地方保存会话不是我的问题。。我只是给出用户想要的答案。。。你可以建议你的答案,但你不能给正确的答案这样的评论。。。
session_set_cookie_params(0, '/', '.site.com');
session_save_path('/home/user/public_html/Sessions');
session_start();