0

如果用户已经登录,我需要在索引页面上创建一个会话,它将标题到成员页面。如果用户销毁会话,它将停留在索引(登录页面)

我所做的是

if(session_start){
    header("location:member.php") or die();
}

if(isset($_POST['email']) && isset($_POST['password'])){



$email=strtolower($_POST['email']);
    $password=md5($_POST['password']);



if($email && $password){
        $connect=mysql_connect("localhost", "root", "");
        $database=mysql_select_db("phplogin", $connect);



$SQL=mysql_query("SELECT * FROM users WHERE email='$email'");
        $numrows=mysql_num_rows($SQL);



if($numrows!=0){
            while($result=mysql_fetch_assoc($SQL)){
                $db_email=$result['email'];
                $db_password=$result['password'];
                $db_firstname=$result['firstname'];
                $db_lastname=$result['lastname'];
                }
            }
        else{
            die("Can't find the user");
            }



if($email==$db_email && $password==$db_password){
            session_start();
            $_SESSION['firstname']=$db_firstname;
            $_SESSION['lastname']=$db_lastname;
            header("location:member.php");
            }   
        else{   
            die("wrong username or password");
            }
        }
    else{die("Please enter email or password");}
    }

这在用户没有销毁会话时有效,但是当用户销毁会话时它没有停留在索引页面

我需要像 facebook 这样的东西,但我不知道 facebook 如何在登录页面和用户页面上共享相同的域名。

所以每次我输入 facebook.com 我都会去我的用户页面,如果我注销,它将成为登录页面

4

3 回答 3

2

你用过if(session_start)session_start()是一个函数。它用于每一页。所以它每次都会重定向你。

另一件事,您需要session_start()在存储会话的页面和获取会话值的页面上。

代替:

if(session_start){
    header("location:member.php") or die();
}  

利用:

session_start();
if(isset($_SESSION['firstname']) && isset($_SESSION['lastname'])){
    header('location:member.php');
}
//and REMOVE session_start(); from where you have written.
于 2012-12-03T11:58:00.773 回答
0

首先; 如果要检查用户是否已登录,仅检查会话是否存在是不够的(即使用户未登录,会话也可能存在)。所以你应该首先编写一个is_logged_in()函数(或类似的东西)来正确检查登录状态。

您的用户总是被重定向的原因是如果会话成功启动,该函数会session_start()返回;true如果会话被破坏,它只是开始一个新的。所以基本上它true几乎总是会返回,如果一切正常(比如用户没有关闭 cookie 等)。

如果您编写了该函数,它实际上非常简单。假设您有两个文件:home.phpmember.php. 第一个是您的主页(带有“Hello visitor!”消息和登录表单),第二个是会员页面。如果这两个文件都是“独立”脚本,您确实可以将用户标头到特定页面(header('Location: home.php');如果用户应该先登录,header('Location: member.php');如果用户已经登录)。

但!如果你想“隐藏”页面(很像 facebook 所做的),你可以在你的 index.php 中包含这些文件。做这样的事情:

if(is_logged_in()) {
    require_once('member.php'); // present member profile page
} else {
    require_once('home.php'); // present login page
}

在您的 index.php 中,您可以设置一个常量(另请参阅关于常量的 php 手册)以确保文件只能包含在 index.php 中:

--- 索引.php:

define('VALID_INCLUDE', true);
// the rest of your code

--- home.php & member.php:

if(!defined('VALID_INCLUDE')) die('You should not request this page directly');

但请注意,如果您想编写这样的应用程序,框架可以帮助您很多;如果出现此类问题,它会涵盖很多内容并使编码速度更快(大多数框架都带有某种身份验证模块,并允许您使用“视图”向用户展示正确的页面,就像我在上面所做的那样解决require_once方案)。

于 2012-12-03T11:56:37.150 回答
0

在您的页面顶部怎么样

if(!isset($_SESSION['firstname']) || !isset($_SESSION['lastname'])){
    header("location:index.php") or die();
}
于 2012-12-03T11:46:25.770 回答