我将现有且成功运行的站点复制到新的开发服务器.
新服务器上的登录现在已经破了,我追踪到了虽然会话cookie被重命名的事实......
ini_set('session.name', 'DOMAIN1');
Run Code Online (Sandbox Code Playgroud)
...浏览器将sesssion cookie存储为PHPSESSID.
当我从新服务器上的应用程序中删除上面的行时,登录再次起作用.但这不是一个好的解决方案,因为另一个应用程序也使用此名称下的PHPSESSID.
我宁愿找到奇怪行为的原因,而不是使用解决方法.如果我不解决它,它可能会咬我别的地方.
也许这已经足够让某人给我提示了一些信息.如果没有,哪些信息有用?
这台机器是一个非常裸露和基本的ubuntu 8.04服务器,我用aptitude安装了apache2,mysql和php5.我还更新了lokales和时区.
解:
我用接受的答案中的代码替换了上面的代码......
if(ini_set('session.name', 'DOMAIN1') === false || !session_name('DOMAIN1'))
{
die('Unable to set sesssion scope');
}
Run Code Online (Sandbox Code Playgroud)
...并且登录现在可以在新服务器上运行.
我正在尝试为我的网站设置一个登录系统,要求有人登录才能发布.我已经设置了会话,它在我的本地主机上工作得很好,但在服务器上却不行.我在某些页面上设置了print_r(session)以查看数据丢失的位置.在checklogin.php页面上,这是当有人登录时运行的页面,它工作正常.这是一些代码:
<?php
session_name('login_session');
session_start();
mysql_connect("localhost","root","root") or die(mysql_error());
mysql_select_db("date_ideas") or die(mysql_error());
$uname=$_POST['uname'];
$uname=mysql_real_escape_string($uname);
$pass=$_POST['pass'];
$pass=mysql_real_escape_string($pass);
$pass=md5($pass);
$query="SELECT * FROM users WHERE uname='$uname' AND pass='$pass'";
$result=mysql_query($query) or die(mysql_error());
$numrows=mysql_num_rows($result);
echo $numrows;
if ($numrows==1)
{
$_SESSION['login']="1";
$_SESSION['uname']=$uname;
echo "<script type='text/javascript'>alert('match');</script>";
print_r($_SESSION);
}
else
{
$_SESSION['login']="";
echo "<script type='text/javascript'>alert('Invalid Login');</script>";
echo "<script type='text/javascript'>window.location = 'login.php?uname=$uname'</script>";
}
?>
Run Code Online (Sandbox Code Playgroud)
当我提交具有良好登录信息的表单时,弹出警报并返回打印:
数组([登录] => 1 [uname] => FrizbeeFanatic14)
所以在这一点上它正在发挥作用.但是,当我转到主页面时,打印成为:
数组()
所以它丢失了会话信息.以下是主页面中的代码:
<?php
session_name('login_session');
session_start();
?>
<html>
<head>
<title>Great Date Ideas</title>
<link rel="stylesheet" type="text/css" href="mainstyle.css" />
<script type="text/javascript" src="validate.js"></script> …Run Code Online (Sandbox Code Playgroud)