2

我在目录中有 3 个基础public_html目录。例如,这些是:

  1. Directory_A 代表http://site.com
  2. Directory_B 代表http://subsite-b.site.com
  3. Directory_C 代表http://subsite-c.site.com

我有另一个public_html名为Sessions我想保存sessions cookies登录用户访问目录(站点和子站点)时的目录

附图清楚地展示了我的目录结构cPanel.

目录结构

我在. 中的文件夹和子文件夹之间传递会话没有问题Directory_A。当访问者切换 Directory_ADirectory_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

现在,由于会话根本没有从一个目录传递到另一个目录,我通过将路径指向 like来public_html更改配置,session.save_pathpublic_html/Sessions

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

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

关于这个问题的任何想法或知识将不胜感激。

4

3 回答 3

0

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

于 2013-07-09T11:58:58.057 回答
0

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

这里有一些示例代码:GitHub这里有一些关于在 PHP 中使用自定义会话处理程序的更多信息。

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

于 2013-07-09T12:04:05.587 回答
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();
于 2013-07-09T12:06:41.977 回答