php:会话可在本地主机上运行,​​但服务器上

时间:2020-08-18 10:08:14

标签: php session server

发布之前,我已阅读:

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

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

我的代码已经在我的机器上工作了,但是,当我将所有内容部署到服务器后,它总是弹出禁止的403。我检查了SESSION,发现它只是Array(),长度为0;

现在我正在尝试通过以下方式做到这一点:

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。 感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

在此之后,我还要检查两件事:

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

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

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