我可以从我网站上的子文件夹,例如/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()之前,某些东西会发出正文内容(从而刷新标头),或者会话保存路径在某个地方被覆盖。