无法在在线服务器中设置会话变量 [英] Not able to set session variable in online server

查看:21
本文介绍了无法在在线服务器中设置会话变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have using session variable for log in form validation. When the user gives correct name and password then the session variable will set and the page will redirect. The page checks the session variable and load related contents.
My code works fine in local server, but in online server, the session variable was not set.

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

validation/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'] 未在在线服务器中设置.有人可以帮我吗?

When user gives name and password as admin, it was successfully loaded the welcome text in local server. But in online server the form only loaded again. The $_SESSION['admin'] was not set in online server. Can anybody help me?

推荐答案

看起来您的在线服务器没有为网络服务器用户提供足够的权限,无法在 /var/lib/php5 中存储会话.

Looks like your online server does not provide enough permissions for web-server user to store sessions in /var/lib/php5.

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

You should ask your host to check it. The easiest way to check if it is sessions problem is to write simple script:

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

echo $_SESSION['some_counter']++;

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

Then just refresh a page few times. If variable is not changed - then you can be sure that it is session management problem, that should be solved by your hosting provider.

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

In case if they don't want to help you - you can change the sessions folder to another directory and see what happens.

编辑:

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

You can try to change storage folder to /tmp for example, just to check - normally, it is public folder for all users on server. But it is bad practice to have sessions stored in public places...

session_save_path('/tmp');

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

If it didn't help - try to use ini_set()

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

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

You should call one of these functions before session starts.

应该有帮助;)

这篇关于无法在在线服务器中设置会话变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆