【问题标题】:my PHP session is not working correctly我的 PHP 会话工作不正常
【发布时间】:2011-03-23 18:06:58
【问题描述】:

我已经为我的网站创建了一个可以正常工作的登录页面,但是如果我只是在 url 之后输入网页,我什至可以在不登录的情况下访问它!

我需要它,以便您只有在登录后才能访问页面。

所以我的登录页面使用了一个表单,该表单又使用了检查登录脚本。

           <?php
            $host="localhost"; // Host name
            $username="blank"; // Mysql username
            $password="blank"; // Mysql password
            $db_name="blank"; // 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");

            // username and password sent from form
            $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 {
         Print "<html>";
         Print "<head>";
         Print "<link href='styles.css' rel='stylesheet' type='text/css' />";
         Print "</head>";
         Print "<body>";
         Print "<img src=images/banner2.png  alt='banner' />";
         Print "<p>Wrong Username or Bad Password.</p>";
         Print "<p>Or <a href='./index.html'>Click Here</a> to try again.</p>";
         Print "</body>";
         Print "</html>";
         }
         ?>

在我的每一页上:

<?php
 session_start();
 if(!session_is_registered(myusername)){
 header("location: index.html");
 }
 ?>

如果您没有有效密码,则密码表单有效,然后显示密码错误,但如果我知道他们的名字,我仍然可以访问每个页面。

谢谢

【问题讨论】:

标签: php cookies login


【解决方案1】:

直接引用 $_SESSION 变量即可,

半伪:

if(authorized()){
    $_SESSION['username'] = 'Hi'; 
}

if($_SESSION['username'] != ''){
// online
}

【讨论】:

    【解决方案2】:

    此功能已被弃用为 PHP 5.3.0 的。依靠这个特性 非常不鼓励。

    你应该使用下面的方式编写代码

    <?php
            if($count==1){
                session_start();            
                $_SESSION['$myusername'];
                $_SESSION['$mypassword'];
                header("location:login_success.php");
             }
             else {
             session_unset();
             session_destroy();
             $_SESSION = array();
             session_start();        
             }
    ?>
    

    并在每个页面上检查

    $authorized=false;
    @session_start();
    if(isset($_SESSION['$myusername'] && isset($_SESSION['$mypassword']);
    {
        $authorized = true;
    }
    
    if(!authorized)
    {
        header('location:index.html');
        exit();
    }
    

    【讨论】:

    • 嗨,我更改了脚本以添加最高位及其废话...pastext.net/2612
    • 不,我把第一位放在我的脚本中,我的旧位在哪里,但它不喜欢它:(
    • 把@放在每个session_start()之前
    • 这是错误消息 HTTP/1.1 500 Internal Server Error Server: Microsoft-IIS/7.5 X-Powered-By: ASP.NET Date: Wed, 23 Mar 2011 09:41:09 GMT Connection :关闭内容长度:218 PHP 警告:session_destroy() [function.session-destroy]:试图破坏 D:\Sites\adam-and-natalies-wedding.co.uk\public_html\loginok.php 中未初始化的会话第 37 行
    • $_SESSION[] 不是 $_SESSION() 它是一个数组而不是一个函数
    【解决方案3】:

    如果密码无效,您是否尝试过使用 session_destroy ?

    【讨论】:

    • 只需将 session_destroy() 添加到显示无效密码消息的块中
    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多