我有一个非常简单的脚本来创建用户:
<?php
include 'mysqlserver.php';
session_start();
$con = mysql_connect($mysql_host, $mysql_username,$mysql_password);
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db($mysql_db, $con);
$newuser = $_POST[username];
$newpassword = $_POST[password];
$confirmnewpassword = $_POST[confirmpassword];
if ($newpassword != $confirmnewpassword) {
die('Passwords do not match.');
}
if ($newuser == null) {
die('You need to choose a username!');
} elseif ($newpassword == null) {
die('You need to enter a password!');
}
$avail_query = mysql_query("SELECT * FROM users WHERE username='$newuser'");
$avail_numrows = mysql_num_rows($avail_query);
if ($avail_numrows != 0) {
die('That user already exists');
}
mysql_query("INSERT INTO users (username, password)
VALUES ('$newuser', '$newpassword')");
$_SESSION['username'] == $newuser;
mysql_close($con);
?>
<script type="text/javascript">
function enterUCP(){
window.location = "/member.php"
}
</script>
</head>
<body onLoad="setTimeout('enterUCP()', 3000)">
Account created! Logging you in...
</body>
最初,我的脚本只是在创建帐户后将您重定向到登录页面。我一直在尝试调整它,以便您在创建帐户后登录。 出于某种原因,我无法编辑$ _SESSION ['username']或任何其他会话变量,即使我已经在第3行启动了会话。我很困惑,因为我的一些其他PHP脚本正确地操作了$ _SESSION变量,我无法分辨我的不同之处。
P.S。请不要评论我的系统的安全性。它可能非常不安全,但我只是在为原型写作。
编辑:只是为了使问题变得毫无用处,任何人都可以找到任何严重的安全漏洞here吗?
答案 0 :(得分:6)
变化:
$_SESSION['username'] == $newuser;
为:
$_SESSION['username'] = $newuser;
您正在比较而不是设置。
答案 1 :(得分:3)
$ _ SESSION ['username'] == $ newuser;
删除第二个=符号。
$_SESSION['username'] = $newuser;
答案 2 :(得分:3)
$_SESSION['username'] == $newuser;
双等号。输出一个,它将起作用:)
$_SESSION['username'] = $newuser;
答案 3 :(得分:3)
很多人已经回答了你的问题,但我不想把它放在评论中。 首先,您可以通过更改
来修复代码$_SESSION['username'] == $newuser;
为:
$_SESSION['username'] = $newuser;
重要:强>
在学习MySQLi或PDO时,请对您的代码执行此操作
$newuser = mysql_real_escape_string($_POST[username]);
保护自己SQL Injection
确保对查询中使用的所有输入执行类似的转义。