PHP SESSION仅在子文件夹中可用

时间:2016-08-04 08:34:18

标签: php session

我可以从子文件夹访问我的SESSIONS,例如。 /老师,/我的网站上的学生,但不是来自/.

下的文件

我的设置:

在我的页面上方:

session_set_cookie_params(time()+86400000, '/', '.mysite.com', 0, 1);
    ini_set('session.use_only_cookies', 1);
    if(!isset($_SESSION))
    {
        session_start();
    }

我如何设置我的会话

session_regenerate_id(true);
$_SESSION['signature'] = $signature;

我的PHP.ini

session.save_path = '/home/mysite/cvsessions'

我出错了什么?

3 个答案:

答案 0 :(得分:7)

  

澄清:这个答案是关于在包含PHP文件的相同文件夹中使用php.ini文件以覆盖系统范围的默认设置,这个答案假设您已经有了标准默认的php.ini文件,您的设置不能或不应该编辑。

我遇到了与您所描述的内容类似的问题,并且会猜测您在每个活动文件夹中没有php.ini个文件,而您实际上可能只有 ONE php.ini文件,因此任何子文件夹(/students等)都没有使用根php.ini而只是使用account-或system-default < / em>的

根据您设置的服务器系统(例如CPanel安装?),然后为了更改默认服务器范围php.ini的设置,新的php.ini文件只包含自定义设置(如在您的情况下,帐户特定会话存储位置)需要安装到 每个 目录中,需要使用非默认的php.ini设置。< / p>

所以,一步一步:

  • 您是否在每个文件夹中都有php.ini,例如//teachers/students等?

  • 所有这些php.ini文件是否相同?

  • 所有文件夹都应该是相同的,所以所有文件夹都应该有自己的php.ini副本,否则它们都不应该。否则,在一个(自定义)php.ini设置和另一个(系统默认)php.ini设置之间进行更改时,会发生这种导致不一致问题的行为更改。

如果缺少任何文件夹,或者只有您的公共html根文件夹中包含php.ini文件,那么这意味着所有其他文件夹都使用默认文件夹,因此公共html根目录正在寻找错误的会话 - 它在'/home/mysite/cvsessions'地址查找,而PHP会话的默认地址类似于/home/tmp

这是否有帮助,或者这是否有用?

检查会话是否已启动的更好方法:

PHP&gt; = 5.4

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

对于PHP&lt;的版本5.4.0

if(session_id() == '') {
    session_start();
}

来源:https://stackoverflow.com/a/18542272/3536236

答案 1 :(得分:0)

嗨,请仔细阅读代码

 $lifetime=time()+86400000;
 session_start();
 setcookie(session_name(),session_id(),$lifetime,'/', '.mysite.com');

答案 2 :(得分:0)

停止更改设置并开始尝试诊断问题。

您提供的信息中没有任何内容可用于指明原因。您的第一步是创建一个这样的简单脚本:

<?php
error_reporting(E_ALL);
session_start();
$_SESSION['visits'][]=$_SERVER['PHP_SELF'];
print "<pre>" . var_export($_SESSION['visits'],true)
   . "</pre><br />" . session_name() . "\n<br />" .
   ini_get('session.save_path');

然后将脚本复制到每个目录。

访问每个已部署实例的URL,检查session_name是否未更改且未报告任何错误。

很可能错误在你的代码中 - 在调用session_start()之前发出了body内容(因此刷新了标题)或者某个地方正在覆盖会话保存路径。