我正在尝试创建一个简单的登录表单。我有session_start()
;作为页面上加载的第一件事。我有一个文件login.php,其中包含登录相关代码,当单击Login按钮时,该代码通过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>";
}
}
当我点击“登录”按钮时,我收到此警告:
警告:session_register()[function.session-register]:无法发送会话缓存限制器 - 已在/ home /中发送的报头(在/home/clicker/public_html/hstrial-RBochner/login.php:1处开始输出)第82行上的clicker / public_html / hstrial-RBochner / login.php
第82行是session_register("email")
;
我还试图创建一个只调用session_destroy()
的Logout按钮,但它给了我这个:
警告:session_destroy()[function.session-destroy]:尝试在第66行的/home/clicker/public_html/hstrial-RBochner/login.php中销毁未初始化的会话
我在这里做错了什么?我尝试将session_start()
放在不同的地方。任何帮助/想法?感谢。
答案 0 :(得分:5)
你需要:
破坏会话:
在session_start();
session_destroy();
您的网络应用程序易受SQL injection攻击。 - 检查best way to stop SQL Injection in PHP
答案 1 :(得分:1)
关于您的退出按钮问题。你必须先开始你的会议
<?php
//logout.php
session_start();
session_destroy();
echo "Logouted"
而不是
session_register()
仅使用
$_SESSION['email'] = '';
答案 2 :(得分:0)
从我在session_register()
PHP文档(link)上可以阅读的内容看来,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']);
?>
答案 3 :(得分:0)
我通过将所有php代码放在页面的最开头来实现它。
答案 4 :(得分:-1)
在执行print或echo之前移动session_register。