我在public_html
目录中有3个基目录。例如:
我在public_html
中有另一个名为Sessions
的目录,我想在记录的用户访问目录(站点和子站点)时保存sessions cookies
附图在cPanel.
我在Directory_A
中的文件夹和子文件夹之间传递会话没有问题。当访问者从Directory_A
切换到Directory_B
或Directory_C
(从http://site.com访问http://subsite-b.site.com或http://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.com,http://subsite-b.site.com和http://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();
这里出了什么问题?它是否因为服务器配置不当而发生?我该怎么做才能将会话从一个目录正确传递到另一个目录?
任何关于这个问题的想法或知识都应该受到赞赏。
答案 0 :(得分:0)
它的发生是因为/tmp
中存在的旧会话没有复制它们。它还可能意味着您没有将目录/文件的权限设置为能够通过Web服务器读取
答案 1 :(得分:0)
您需要使用自定义会话处理程序将会话存储在数据库中,而不是使用文件系统中的目录(例如/ tmp)。
以下是一些示例代码:GitHub和here'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();