php:session在localhost上工作,但在服务器上工作



在发布之前,我已经阅读了:

  • 会话在服务器中不工作
  • 会话_启动

但是,我没有找到解决这个问题的方法。

好吧,我正在编写一个应用程序,该应用程序使用jQueryAJAX作为用户登录页面,以检查他们是否是管理员,然后将SESSION变量传递到admin.php页面。如果未设置SESSION,则显示403 Forbidden页面。

我已经在我的机器上运行了代码,然而,在我将所有东西部署到服务器后,它总是会显示403禁止。我检查了SESSION,发现它只是长度为0的Array()

现在我正试图通过来做到这一点

ini_set('session.save_path', $sessdir); 
session_start();

但我无法让它在我的本地机器上工作,这里有两个例子:

  • 第一个php文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>

<?php 
// abs path of this file
function inve(){return "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";}

// remove n items from end of a path in string format
function rewind_url($dire, $ind){
$pieces = explode('/', $dire);
for($i=0; $i<$ind; $i++){
array_pop($pieces);
}
$pieces = implode('/', $pieces);
return $pieces;
}

function put($str){
print_r("<h2>" . $str . "</h2>");
}

$sessdir = rewind_url(inve(), 1);
ini_set('session.save_path', $sessdir); 
session_start();
$_SESSION['name'] = 'joseph';

put($sessdir);
put(count($_SESSION));
?>
<a href='another.php'>here</a>
</body>
</html>
  • 第二个php文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>

<?php 
// abs path of this file
function inve(){return "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";}

// remove n items from end of a path in string format
function rewind_url($dire, $ind){
$pieces = explode('/', $dire);
for($i=0; $i<$ind; $i++){
array_pop($pieces);
}
$pieces = implode('/', $pieces);
return $pieces;
}

function put($str){
print_r("<h2>" . $str . "</h2>");
}

$sessdir = rewind_url(inve(), 1);
ini_set('session.save_path', $sessdir); 

session_start();

put(count($_SESSION));

?>  

</body>
</html>

简单地说,我想在点击链接后看到数字1。我非常感谢你的帮助。

很难说,我们不知道是否启用了phpsession,我应该签出phpinfo((;

此外,我应该检查两件事后:

使所有的session_starts();位于每页的顶部。

此外,the ini_set('session.save_path', $sessdir);没有https的完整路径,而是在您提供的第一个链接中解释的相对目录路径。

使用:$sessdir = dirname(dirname(__FILE__)).'/session_dir'

最新更新