在php中将新会话与旧会话匹配并重定向到正确的页面

时间:2014-04-12 12:01:42

标签: php session

我遇到的情况是用户电子邮件和密码在页面editProfile.php的会话中,带有id。例如../editProfile.php?id=17并且可以更新自己的个人资料,

但是,如果我更改url id值,如../editProfile.php?id=18 ..这也可以更新其他信息。为什么呢?

所以,我的问题是如果有人更改了id值,如何重定向到其他页面 或者如何匹配会话然后重定向。

由于

3 个答案:

答案 0 :(得分:0)

你需要检查会话中的id与来自url的那个;

<?php
session_start();
$id = $_GET["id"];
// I assume you have user id in session also
if (!empty($_SESSION["user_id"] && $_SESSION["user_id"] == $id)) {
    // Do your updates here
} else {
    header("Location: other_page.php");
    exit;
}

编辑:如果您在会话中没有user id,则可以在用户登录时设置,或者您可以在flyw上获取;

$user_id = get_user_id($_SESSION["username"], $_SESSION["password"]); // You can write a function to get user id
$_SESSION["user_id"] = $user_id;

if (!empty($_SESSION["id"] && $_SESSION["id"] == $id)) {
    // Do your updates here
} else {
    header("Locatio: index.php");
    exit;
}

答案 1 :(得分:0)

首先,当您成功登录时,您需要在登录页面上设置此会话变量..

$_SESSION['user_id']=$user_id; // Say , if it is 17 in this case..

所以来到您的上述场景..您可以使用功能将editprofile.php更改为此类

<强> editprofile.php

<?php
session_start();

$userid = isset($_GET['id']) ? $_GET['id'] : "Not Set";

if($userid=="Not Set" || (int)$_SESSION['user_id']!=$userid)
{
  die("You don't have access !");
}

答案 2 :(得分:0)

在您的位置我使用check_session_id_from_db($ses_id)检查此会话中是否存在id

<?php 
$ses_id = session_id(); 
$bsid_exists = false; 
$bsid_exists = check_session_id_from_db($ses_id); 
 if ($bsid_exists){ 
 //This is a reentry and the session already exists 
 // create a new session ID and start a new 
session_regenerate_id();         
$ses_id = session_id(); 
 } 
?>

在此处查看有关此方法的更多信息:http://www.php.net/manual/fr/function.session-id.php

了解有关会话的更多信息:http://www.php.net/manual/fr/book.session.php