我创建了一个网站,您需要登录才能访问不同的页面,没什么特别的。 为了让用户保持登录状态,我将会话设置在每个页面的顶部。
我的问题是,我不想在每个页面上设置不同的会话变量。我宁愿有一个函数,我可以调用它来设置它们。另外,我不需要每个页面上的所有变量,所以我希望函数接受可选参数(例如每个页面上没有使用的电子邮件或个人资料图片)。
我在每个页面的顶部调用它:
<?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');
}
}
?>
我尝试了一些东西,但它只是让我犯了很多错误。 有人已经这样做了或者发现了一个脚本吗?那可能吗?
答案 0 :(得分:0)
首先,如果你想要做的是重载你的功能,你就不能这样做。有关详细信息,请参阅this。但是,您可以这样做:
<?php
set_variables($username, $email, $picture,$group)
{
$_SESSION['username'] = $username;
$_SESSION['email'] = $email;
$_SESSION['picture'] = $picture;
$_SESSION['group'] = $group;
}
?>
将此功能放在session.php文件中。
答案 1 :(得分: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");
答案 2 :(得分:0)
与您提出的问题没有直接关系,但您应该真正在重定向标题后添加exit;
。即使没有登录,客户端也可以忽略标题并仍然加载页面。
答案 3 :(得分:0)
如果你想让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');
}
}
//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');
?>
答案 4 :(得分:0)
我认为你需要移动session_start();到实际的页面。在session_start()上使用require_once;不是一个好计划。