PHP会话(登录页面和用户页面)

PHP会话(登录页面和用户页面),php,Php,我需要在索引页上创建一个会话 若用户已经登录,它将标题到成员页面。 如果用户破坏会话,它将停留在索引(登录页面) 我所做的是 if(session_start){ header("location:member.php") or die(); } if(isset($_POST['email']) && isset($_POST['password'])){ $email=strtolower($_POST['email']); $password=md5

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

我所做的是

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,我都会进入我的用户页面,如果我注销,它将成为登录页面

在你的页面顶部如何

if(!isset($_SESSION['firstname']) || !isset($_SESSION['lastname'])){
    header("location:index.php") or die();
}

首先,;如果要检查用户是否登录,仅检查会话是否存在是不够的(即使用户未登录,会话也可能存在)。因此,您应该首先编写一个
is\u logged\u in()
函数(或类似的函数)来正确检查登录状态

用户总是被重定向的原因是,如果会话成功启动,函数
session\u start()
将返回
true
;如果会话被破坏,它只会启动一个新会话。所以,如果一切正常(比如用户没有关闭cookies等),它基本上总是返回
true

如果您已经编写了该函数,那么它实际上非常简单。让我们假设您有两个文件:
home.php
member.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中,您可以设置一个常量(另请参见),以确保文件只能包含在index.php中:

define('VALID_INCLUDE', true);
// the rest of your code
---index.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\u once
解决方案所做的那样)。

您已经使用了
if(session\u start)
<代码>会话\u start()是一个函数。它被用在每一页上。所以它每次都会重定向你

另外,您需要在存储会话的页面和获取会话值的页面上
session\u 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.

要像facebook这样做,您需要配置您的Web服务器,很可能是apache。在那里,您可以路由传入请求。顺便说一下,使用mysql_查询是不安全的,您应该使用PDO或mysqli库。此外,session_start是一个函数,您应该启用cookies。这些是否正确?当您使用db值检查输入值时,您使用的是
session\u start()
。将其从您编写的地方删除,并在页面顶部添加
session\u start()