我正在尝试创建一个简单的登录表单。我有session_start()
;作为页面上加载的第一个内容。我有一个文件login.php,其中包含登录相关的代码,这是通过一个ajax调用处理时,单击登录按钮。它包含:
if ($_GET['cemail']) {
$email = $_GET['cemail'];
$password = md5($_GET['cpassword']);
$sql = "select * from users where email='" . $email . "' and password='" . $password . "'";
$result = mysql_query($sql);
if (mysql_num_rows($result) >= 1) {
session_register("email");
}
else {
echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>";
}
}
当我点击Login按钮时,我得到这个警告:
警告:session_register() [function。在/home/clicker/public_html/hstrier - rbochner/login.php的第82行
中,无法发送会话缓存限制器-头已经发送(输出开始于/home/clicker/public_html/hstrier - rbochner/login.php:1)
第82行是session_register("email")
;
我还试图创建一个注销按钮,只是调用session_destroy()
,但它给了我这个:
警告:session_destroy() [function。试图销毁/home/clicker/public_html/hstri- rbochner/login.php中第66行未初始化的会话
我在这里做错了什么?我试着把session_start()
放在不同的地方。任何帮助/想法吗?谢谢。
你需要:
- 将session_start()放在代码的开始部分
- 不要使用session_register(),这是一个过时的函数,替换为$_SESSION['foo'] = 'baa';
-
destroy session:
session_start ();session_destroy ();
-
您的web应用程序容易受到SQL注入攻击。
关于您的注销按钮问题。你必须先开始你的会话
<?php
//logout.php
session_start();
session_destroy();
echo "Logouted"
代替
session_register()
使用 $_SESSION['email'] = '';
我通过将所有php代码放在页面的最开头来使其工作
从我在session_register()
PHP文档(链接)中读到的,似乎session_register()
已被弃用,而$_SESSION["email"] = "email@example.com";
是PHP 4.1.0的新方法。
一个代码示例将是(我不确定这是否有效,但它应该引导你在正确的方向);
<?php
if ($_GET['cemail']) {
$email = $_GET['cemail'];
$password = md5($_GET['cpassword']);
$sql = "select * from users where email='" . $email . "' and password='" . $password . "'";
$result = mysql_query($sql);
if (mysql_num_rows($result) >= 1) {
$_SESSION['email'] = $email;
}
else {
echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>";
}
}
?>
对于登出,您将执行:
<?php
session_start();
session_destroy();
?>
或
<?php
session_start();
if(isset($_SESSION['email']))
unset($_SESSION['email']);
?>
在执行print或echo之前移动session_register