我可以从子文件夹访问我的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'
我出错了什么?
答案 0 :(得分:7)
澄清:这个答案是关于在包含PHP文件的相同文件夹中使用php.ini文件以覆盖系统范围的默认设置,这个答案假设您已经有了标准默认的php.ini文件,您的设置不能或不应该编辑。
我遇到了与您所描述的内容类似的问题,并且会猜测您在每个活动文件夹中没有php.ini
个文件,而您实际上可能只有 ONE 您的根文件夹中的strong> 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();
}
答案 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内容(因此刷新了标题)或者某个地方正在覆盖会话保存路径。