【问题标题】:Passing PHP session from one directory to another created parallely in public_html将 PHP 会话从一个目录传递到另一个在 public_html 中并行创建的目录
【发布时间】:2013-07-09 20:06:41
【问题描述】:

我在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

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

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

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 中的一个目录传递到另一个目录,我通过指向public_html/Sessionslike 的路径更改了session.save_path 的配置,

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

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

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

【问题讨论】:

  • 您不应该将会话数据保存在我可以通过浏览器访问的文件夹中。它应该在 public_html 文件夹之外的某个地方,或者至少在它之下。
  • @RiggsFolly 感谢您的宝贵意见。是的,你是对的,在这种情况下可能存在会话劫持的可能性。我只是通过一种非常基本的方式进行。

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


【解决方案1】:

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

【讨论】:

  • 感谢您的宝贵意见。在这种情况下,我应该将public_html 中的Session 文件夹“chmod”到0777 吗?
  • 您通过在网络服务器可读目录上公开会话而在系统中造成很大的安全风险
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢。在这种情况下,session ids 不会附加在查询字符串中吗?我想在查询字符串中避免session ids。我会花时间了解更多。
【解决方案3】:
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();

【讨论】:

  • 感谢您的指导。我会试试的,虽然我觉得php.ini可以配置相同的路径,这样更方便。
  • 在公共目录中保存会话.. 你疯了吗?
  • @edwardmp 实际上Goutam Pal 理解我的要求。我在问题中描述的目录结构只是一个易于理解的示例。
  • @edwardmp 在公共目录或其他任何地方保存会话不是我的问题。我只是给出用户想要的答案...你可以提出你的答案,但你不能给出这样的 cmets到正确的答案...
猜你喜欢
  • 2021-09-19
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 2015-04-19
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多