0

我创建了一个站点,您需要登录才能访问不同的页面,没什么特别的。为了让用户保持登录状态,我将会话设置在每个页面的顶部。

我的问题是,我不想在每个页面的顶部设置不同的会话变量。我宁愿有一个可以调用的函数来设置它们。另外,我不需要每个页面上的所有这些变量,因此我希望该函数接受可选参数(例如电子邮件或未在每个页面上使用的个人资料图片)。

我在每一页的顶部调用它:

<?php 

require_once 'session.php';
confirm_logged_in();
$username = $_SESSION['username'];
$email = $_SESSION['email'];
$picture = $_SESSION['picture'];
$group = $_SESSION['group'];

?>

我想让它更像这样,并且只能设置我需要的变量:

<?php 

require_once 'session.php';
confirm_logged_in();
set_variables($username, $email);

?>

'session.php' 文件是这样的:

<?php 
session_start();
function logged_in(){
    return isset($_SESSION['username']);
}
function confirm_logged_in(){
    if(!logged_in()){
        header('location: start.php');
    }
}
?>

我已经尝试了一些事情,但这只是导致我出现大量错误。有人已经这样做或找到了这样做的脚本吗?那可能吗?

4

5 回答 5

0

首先,如果你想做的是重载你的函数,你不能那样做。有关这方面的更多信息,请参阅。但是,您可以这样做:

<?php

set_variables($username, $email, $picture,$group)
{
$_SESSION['username'] = $username;
$_SESSION['email'] = $email;
$_SESSION['picture'] = $picture;
$_SESSION['group'] = $group;
}
?>

将此函数放在您的 session.php 文件中。

于 2012-10-27T14:49:18.673 回答
0

我不确定我是否理解正确,但如果我理解了,您需要做的就是创建一个新文件,我们将其命名为“Session_Variables.php”。

创建文件后,将以下代码粘贴到其中:

<?php
require_once 'session.php';
confirm_logged_in();
$username = $_SESSION['username'];
$email = $_SESSION['email'];
$picture = $_SESSION['picture'];
$group = $_SESSION['group'];
?>

然后,最后,只需将旧代码替换为:

include("Session_Variables.php");
于 2012-10-27T14:49:31.560 回答
0

与您提出的问题没有直接关系,但您确实exit;应该在重定向标头之后添加。即使没有登录,客户也可以忽略标题并仍然加载您的页面。

于 2012-10-27T14:52:12.703 回答
0

如果你想做set_variables($username, $email)我认为你想要的工作,你需要写这样的东西。

会话.php

<?php 
session_start();
function logged_in(){
    return isset($_SESSION['username']);
}
    function confirm_logged_in(){
    if(!logged_in()){
        header('location: start.php');
    }
}
//Only Picture and group are Optionals
function set_variables($username, $email, $picture = '', $group = ''){
    //you can check here is thoses variables are set or valid before assign them
    $_SESSION['username'] = $username;
    $_SESSION['email'] = $email;
    $_SESSION['picture'] = $picture;
    $_SESSION['group'] = $group;
}
//create a function that we need to retrieve thoses values
function get_variable($name){
    if ( isset( $_SESSION[$name] ) ) return $_SESSION[$name];
    return FALSE; //if the variable is not set.
}
?>

你可以像这样使用它

<?php 
require_once 'session.php';
confirm_logged_in();
set_variables($username, $email);
$username = get_variable('username');
?>
于 2012-10-27T14:53:11.980 回答
0

我认为你需要移动 session_start(); 到实际页面。在 session_start() 上使用 require_once;不是一个好计划。

于 2017-06-12T03:35:00.273 回答