我使用会话变量进行登录表单验证。当用户提供正确的名称和密码时,会话变量将设置,页面将重定向。该页面检查会话变量并加载相关内容 我的代码在本地服务器上工作正常,但在在线服务器中,未设置会话变量。
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']
。有人能帮助我吗?
答案 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
中对文件进行编码希望这会有所帮助:)