记录的会话转到所有网址

时间:2017-09-12 09:49:05

标签: php session

我有两个用户me& bai

如果me登录,则会转到http://localhost/Ebooks/new/me

如果bai登录,则会转到http://localhost/Ebooks/new/bai

我正在使用会话,以便在没有login的情况下没有人使用他们各自的链接。

但是我遇到的问题是,如果登录bai,并且用户在URL栏中键入http://localhost/Ebooks/new/me,则会转到该文件夹​​,但不应该登录用户另一个

代码在这里: -

http://localhost/Ebooks/new/的index.php

<?php
session_start();
require_once 'class.user.php';
$user_login = new USER();

if($user_login->is_logged_in()!="")
{
    $user_login->redirect($logout);
}

if(isset($_POST['btn-login']))
{
    $uname = trim($_POST['txtuname']);
    $upass = trim($_POST['txtupass']);

    if($user_login->login($uname,$upass))
    {
        $user_login->redirect($uname);
    }
}
?>

http://localhost/Ebooks/new/ class.user.php

public function login($uname,$upass)
    {
        try
        {
            $stmt = $this->conn->prepare("SELECT * FROM tbl_users WHERE userName=:username");
            $stmt->execute(array(":username"=>$uname));
            $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

            if($stmt->rowCount() == 1)
            {
                if($userRow['userStatus']=="Y")
                {
                    if($userRow['userPass']==md5($upass))
                    {
                        $_SESSION['userSession'] = $userRow['userID'];
                        return true;
                    }
                    else
                    {
                        header("Location: index.php?error");
                        exit;
                    }
                }
                else
                {
                    header("Location: index.php?inactive");
                    exit;
                }   
            }
            else
            {
                header("Location: index.php?error");
                exit;
            }       
        }
        catch(PDOException $ex)
        {
            echo $ex->getMessage();
        }
    }


    public function is_logged_in()
    {
        if(isset($_SESSION['userSession']))
        {
            return true;
        }
    }

    public function redirect($url)
    {
        header("Location: $url");
    }

    public function logout()
    {
        session_destroy();
        $_SESSION['userSession'] = false;
    }

http://localhost/Ebooks/new/bai/index.php&amp; http://localhost/Ebooks/new/me.php都有: -

<?php require_once '../home.php' ?>

http://localhost/Ebooks/new/home.php

<?php
session_start();
require_once 'class.user.php';
$user_home = new USER();

if(!$user_home->is_logged_in())
{
    $user_home->redirect($web);
}

$stmt = $user_home->runQuery("SELECT * FROM tbl_users WHERE userID=:uid");
$stmt->execute(array(":uid"=>$_SESSION['userSession']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);

?>

请帮助我,如何清除它!

3 个答案:

答案 0 :(得分:1)

这是解决方案:

在会话中也存储用户名。所以在登录

 $_SESSION['userSession'] = $userRow['userID'];
 $_SESSION['user_name'] = $userRow['userName'];

然后在home.php中检查带路径的用户名

 if($_SERVER['REQUEST_URI'] != $_SESSION['user_name'])
    {
       //show error or redirect to user page
    }
    else
    {
    //continue your code

    }

编辑尝试编辑代码进行网址检查(在home.php中)

$url =  $_SERVER['REQUEST_URI'];

$exp = explode("/",$url);
$match_name= "";
if(isset($exp[count($exp)-2]) && $exp[count($exp)-2] != "")
{
    $match_name= $exp[count($exp)-2];
}
elseif(isset($exp[count($exp)-1]) && $exp[count($exp)-1] != "")
{
     $match_name= $exp[count($exp)-1];
}
if($match_name != $_SESSION['user_name'])
        {
           //show error or redirect to user page
        }
        else
        {
        //continue your code

        }

答案 1 :(得分:0)

非常简单,将请求的目录与用户的用户名进行比较,看看它们是否匹配,如果有,则显示它,否则会向他们显示错误消息。

<?php
$exists = strrpos($url, '/');
$requested_username = $exists === false ? false : substr($url, $exists + 1);

if ($requested_username == $_SESSION['username_here']) {
    /** Pass... **/
} else {
    /**  Fail... **/
}
?>

您可以使用请求的网址替换$url

直播示例

Repl

答案 2 :(得分:-1)

您需要检查&#34; me&#34;页面,如果用户被授权,那么继续,否则将他重定向到&#34; bai&#34;页。和其他类型的用户一样。