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

时间:2012-07-28 11:29:48

标签: php session

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

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;
});

验证/ login.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']。有人能帮助我吗?

2 个答案:

答案 0 :(得分:4)

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

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

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

echo $_SESSION['some_counter']++;

然后只刷几页。如果变量未更改 - 那么您可以确定它是会话管理问题,应该由您的托管服务提供商解决。

如果他们不想帮助您 - 您可以change the sessions folder到另一个目录,看看会发生什么。

修改

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

session_save_path('/tmp');

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

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

您应该在会话开始之前调用之一。

应该有所帮助;)

答案 1 :(得分:0)

试试这个:

<?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

中对文件进行编码

Use notepad++

希望这会有所帮助:)