【问题标题】:CHECK PHP SESSION - ISSET($SESSION - IS NOT WORKING [closed]检查 PHP 会话 - ISSET($SESSION - 不工作 [关闭]
【发布时间】:2012-11-12 01:36:57
【问题描述】:

这是在我的页面中,它应该检查用户是否已登录 http://carbonyzed.co.uk/Websites/Jason/sites/2/test/login_success.php

但任何人都可以评估它,而不仅仅是那些登录的人

<?php
session_start();
if( isset($_SESSION["myusername"]) ){
header("location:main_login.html");
}
?>

我试过了

if(isset($_SESSION["myusername"])){

if(isset($_SESSION[$myusername])){

登录代码也许没有创建会话?

<?php

ob_start();
$host="ClubEvents.db.9606426.hostedresource.com"; // Host name 
$username="ClubEventsRead"; // Mysql username 
$password="Pa55word!"; // Mysql password 
    $db_name="ClubEvents"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
    $myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>

【问题讨论】:

  • session_register() 从 php 版本 5.3 开始贬值,并从 php 版本 5.4 中删除。所以请不要再使用它了。 php.net/manual/en/function.session-register.php
  • 感谢您发布有效的数据库凭据和服务器的主机名。您可能应该为您的Administrative 用户选择一个比password 更强的密码,并且至少要查看salting 密码,而不是将其存储为普通的MD5。最后,不要只是从这篇文章中编辑凭据,它们仍会在编辑日志中。您必须在服务器上更改它们。此外,如果您将member 密码存储为纯文本,您将在夜间被狂犬病山羊吃掉。
  • 它是一个测试数据库,我的实际数据库不同
  • 我想添加它,以便人们在觉得需要时可以测试它
  • 你的葬礼。如果您付钱给我,我什至不会将这样的只读 mySQL 帐户暴露在互联网上。

标签: php session login


【解决方案1】:

在 if 语句中添加 NOT 运算符 !。也不要忘记在标题后添加exit()location 标头告诉浏览器重定向,但攻击者可以查看您的页面并简单地忽略 location 标头,从而绕过您的身份验证系统,因为您的 PHP 代码将继续执行。

if( !isset($_SESSION["myusername"]) ){
    header("location:main_login.html");
    exit();
}

此外,您没有在您发布的登录代码中调用session_start(),因此无法访问会话。

【讨论】:

  • +1 记得退出,对我来说 =oP。
  • session_start();添加到您的其他页面并将if语句更改为如图所示。
  • +2 我加倍@crypticツ评论,我几乎把我所有的头发都撕了,就在剩下几根头发的时候,我在这里看到了exit()注释:)
【解决方案2】:
<?php

session_start();
if (!isset($_SESSION['myusername']))
{
    header('Location: main_login.html');
}

?>

你需要否定检查。

【讨论】:

  • 好的,我用过这个,但现在它无法登录 - 可能,我的登录可能没有创建会话?
【解决方案3】:

你也可以使用:

<?php

session_start();
if (empty($_SESSION['myusername'])) {
    header('Location: main_login.html');
}

?>

【讨论】:

    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2012-02-13
    相关资源
    最近更新 更多