我使用会话变量进行登录表单验证。当用户提供正确的名称和密码时,会话变量将被设置,页面将重定向。该页面检查会话变量和负载相关内容
我的代码在本地服务器上运行良好,但在在线服务器上,会话变量没有设置。
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
使用记事本++
希望这有帮助:)