PHP SESSION仅在子文件夹中可用


PHP SESSION is available only in subfolders

我可以从我网站上的子文件夹,例如/tachers,/staudents访问我的SESSIONS,但不能从/下的文件访问。

我的设置:

在我的页面上方:

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

我如何设置SESSIONS

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

我的PHP.ini

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

我做错了什么?

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

我遇到了与您所描述的类似的问题,可能会猜测您在每个活动文件夹中都没有php.ini文件,而您的根文件夹中可能只有ONEphp.ini文件,因此任何子文件夹(/students等)都没有使用根php.ini,而只是使用帐户或系统默认值

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

所以,一步一步:

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

  • 所有这些php.ini文件都一样吗?

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

如果任何文件夹缺少它们,或者预先捕获到只有公共html根文件夹有php.ini文件,那么这意味着所有其他文件夹都在使用默认文件,因此公共html根在错误的位置查找会话——它在'/home/mysite/cvsessions'地址中查找,而PHP会话的默认地址类似于/home/tmp

这有帮助吗?还是偏离了目标?


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

PHP>=5.4

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

对于PHP版本<5.4.0

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

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

嗨,请浏览代码

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

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

您提供的信息中没有任何内容指向原因。您的第一步是创建一个简单的脚本,如下所示:

<?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()之前,某些东西会发出正文内容(从而刷新标头),或者会话保存路径在某个地方被覆盖。