将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个基本目录。例如:

  • 目录A表示
  • 目录_B表示
  • 目录C表示
  • 我在
    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();