将PHP会话从一个目录传递到另一个目录,并在public_html中并行创建

时间:2013-07-09 11:53:44

标签: php mysql session session-variables session-cookies

我在public_html目录中有3个基目录。例如:

  1. Directory_A代表http://site.com
  2. Directory_B代表http://subsite-b.site.com
  3. Directory_C代表http://subsite-c.site.com
  4. 我在public_html中有另一个名为Sessions的目录,我想在记录的用户访问目录(站点和子站点)时保存sessions cookies

    附图在cPanel.

    中清楚地展示了我的目录结构

    Directory Structure

    我在Directory_A中的文件夹和子文件夹之间传递会话没有问题。当访问者从Directory_A切换到Directory_BDirectory_C(从http://site.com访问http://subsite-b.site.comhttp://subsite-c.site.com时)会出现此问题尽管我在上述子网站的每一页中都设置了变量session_set_cookie_params,例如

    $mysession = session_name("mysession");
    session_set_cookie_params(0, '/', '.site.com');
    session_start();
    

    值得注意的是,目前变量session.save_path在我的PHP服务器上具有以下配置。

    session.save_path   /tmp    /tmp
    

    现在,由于会话根本没有从一个目录传递到public_html中的另一个目录,我通过将路径指向session.save_path来改变public_html/Sessions的配置,< / p>

    session.save_path   /public_html/Sessions   /public_html/Sessions
    

    当访问者访问这些网站时,上述配置更改会在http://site.comhttp://subsite-b.site.comhttp://subsite-c.site.com的每个页面中返回类似警告。

    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();

    这里出了什么问题?它是否因为服务器配置不当而发生?我该怎么做才能将会话从一个目录正确传递到另一个目录?

    任何关于这个问题的想法或知识都应该受到赞赏。

3 个答案:

答案 0 :(得分:0)

它的发生是因为/tmp中存在的旧会话没有复制它们。它还可能意味着您没有将目录/文件的权限设置为能够通过Web服务器读取

答案 1 :(得分:0)

您需要使用自定义会话处理程序将会话存储在数据库中,而不是使用文件系统中的目录(例如/ tmp)。

以下是一些示例代码:GitHubhere's有关在PHP中使用自定义会话处理程序的更多信息。

将会话保存在数据库中时,只要可以连接到数据库,就可以从任何站点访问它们。它比听起来简单。

答案 2 :(得分:0)

session_set_cookie_params(0, '/', '.site.com');
session_start();

session_set_cookie_params(0, '/', '.site.com');
session_save_path('/home/user/public_html/Sessions');
session_start();