【问题标题】:php: session works on localhost but serverphp:会话在本地主机上工作,但在服务器上
【发布时间】:2020-12-07 12:10:43
【问题描述】:

发帖前,我已阅读:

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

好吧,我正在编写一个使用 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。 非常感谢您的帮助。

【问题讨论】:

  • 尝试将会话开始放在页面顶部
  • 启用正确的 PHP 错误报告,我非常有信心它必须在这里告诉您与会话相关的内容。
  • 对于访问者,使用会话时要注意路径,在重定向中始终使用相对路径。如果您使用绝对路径,会话将被垃圾收集。

标签: php session server


【解决方案1】:

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

接下来我应该检查两件事:

让所有session_starts(); 出现在每一页的顶部。

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

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

【讨论】:

  • 非常感谢。再多一个,需要创建目录session_dir吗?
  • 没问题,您需要为此创建一个目录,最简单的方法是使用您的 ftp 程序。确保你是否使用>> dirname(FILE) 将目录添加到first.php 和second.php 文件的同一目录中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2014-02-13
  • 2023-03-21
  • 2013-04-28
  • 2016-08-04
  • 2014-01-15
  • 2019-08-18
相关资源
最近更新 更多