无法在联机服务器中设置会话变量



我使用会话变量进行登录表单验证。当用户提供正确的名称和密码时,会话变量将被设置,页面将重定向。该页面检查会话变量和负载相关内容
我的代码在本地服务器上运行良好,但在在线服务器上,会话变量没有设置。

admin.php

<?php
    session_start();
    $admin = 0;
    if(isset($_SESSION['admin'])){
          $admin = $_SESSION['admin'];
    }
    if($admin == 0){
?>
 <form action="" class="login">
      <label>User Name :</label>
      <input type="text" class="uname"/>
      <label>Password :</label>
      <input type="password" class="pwd"/>
      <input type="submit" class="lSubmit" value="SUBMIT"/>
      <p class="alert lAlert">test alert</p>
 </form>
<?php }elseif($admin == 1){ ?>
      <h1>Welcome Site Admin..!!</h1>
<?php } ?>

jQuery

$('.lSubmit').click(function(){
var name = $('.uname').val();
var pwd = $('.pwd').val();
    $.post("validation/login.php",{name:name,pwd:pwd}).success(function(data){
       var obj = jQuery.parseJSON(data);
       if(obj.success == 1){
           $('.alert').css('color','#067800');
           window.location = "/admin.php";
       }else{
           $('.alert').css('color','#CC0000');
       }
       $('.lAlert').text(obj.msg);
       $('.lAlert').fadeIn('slow');
    });
    return false;
});

验证/登录.php

<?php
     session_start();
     $name = $_POST['name'];
     $pwd = $_POST['pwd'];
     $err['success'] = 0;
     $err['msg'] = '';
     if($name == ''){
         $err['msg'] = 'Name required';
     }else if($pwd == ''){
         $err['msg'] = 'Password required';
     }else if($name != 'admin'){
         $err['msg'] = 'Wrong username';
     }else if($pwd != 'admin'){
         $err['msg'] = 'Wrong password';
     }else{
         $err['msg'] = 'Success';
         $err['success'] = 1;
         $_SESSION['admin'] = 1;
     }
     echo json_encode($err);
 ?>

当用户将名称和密码设置为admin时,它已成功地在本地服务器中加载了欢迎文本。但在在线服务器中,表单只是再次加载。未在联机服务器中设置$_SESSION['admin']。有人能帮我吗?

看起来您的在线服务器没有为web服务器用户提供足够的权限来在/var/lib/php5中存储会话。

你应该让你的主机检查它。检查它是否是会话问题的最简单方法是编写简单的脚本:

if (empty($_SESSION['some_counter'])) {
    $_SESSION['some_counter'] = 0;
}
echo $_SESSION['some_counter']++;

然后只需刷新页面几次。若变量并没有改变,那个么您可以确定这是会话管理问题,应该由您的托管提供商来解决。

如果他们不想帮助你,你可以将会话文件夹更改为另一个目录,看看会发生什么。

编辑

例如,您可以尝试将存储文件夹更改为/tmp,只是为了检查一下——通常情况下,它是服务器上所有用户的公用文件夹。但把会议存放在公共场所是不好的做法。。。

session_save_path('/tmp');

如果没有帮助,请尝试使用ini_set()

ini_set('session.save_path', '/tmp');

您应该在会话开始前调用其中一个函数。

应该有帮助;)

试试这个:

<?php
session_start() ;
$err = array() ;
if ((empty($_POST["name"])) or ($_POST["name"] != "admin")) {
  $err[] = "Wrong username" ;
}
if ((empty($_POST["pwd"])) or ($_POST["pwd"] != "admin")) {
  $err[] = "Wrong password" ;
}
if (count($err) == 0){
  $message = "Success" ;
   $_SESSION['admin'] = true;  
}
?>

注意:在将任何内容输出到网页之前,必须使用session_start()。在启动此功能之前,没有回声,没有符号,没有html。把它放在你的网页顶部。此外,如果您将其放在顶部,但仍然无法启动会话,则编码可能会出现问题,因为空字符串也被认为是一个符号。用UTF-8编码文件,不带BOM

使用记事本++

希望这有帮助:)

最新更新