1

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

管理员.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']在在线服务器中设置。有谁能够帮我?

4

2 回答 2

4

看起来您的在线服务器没有为网络服务器用户提供足够的权限来将会话存储在/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');

您应该在会话开始之前调用这些函数之一。

应该有帮助;)

于 2012-07-28T11:43:26.737 回答
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。将其放在网页的顶部。此外,如果您将它放在顶部,但仍无法启动会话,则编码可能是问题,因为空字符串也被视为符号。在没有 BOM 的情况下以 UTF-8编码您的文件

使用记事本++

希望这可以帮助 :)

于 2012-07-28T11:48:20.583 回答