2012-10-27 75 views
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); 

?> 

的「會議.php'文件是這樣的:

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

我已經嘗試了一些東西,但它只是導致我大量的錯誤。 有人已經這樣做或發現了一個腳本來做這件事嗎?那可能嗎?

+0

請將您所看到的錯誤添加到問題中。 – Ray

+0

那麼錯誤是什麼呢? – Shades88

+0

您是否真的需要將'$ _SESSION'中的變量提取到同名的全局或本地變量中?爲什麼不直接使用會話?它作爲超全球性質的性質意味着它可以在所有範圍內使用。而不是'$ email = $ _SESSION ['email']; echo $ email;'爲什麼不直接使用會話'echo $ _SESSION ['email'];'這完全迴避了你加載的本地變量的問題。此外,它可以節省您將更改同步到全局變量$ _SESSION中的麻煩。 –

回答

0

首先,如果你想要做的是超載你的功能,你不能這樣做。欲瞭解更多信息,請參閱this。但是,您可以這樣做:

<?php 

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

將此函數放入您的session.php文件中。

0

我不知道我是否理解正確,但如果我確實需要做的是創建一個新文件,我們稱之爲「Session_Variables.php」。您創建的文件

後,下面的代碼粘貼到:

include("Session_Variables.php"); 
0

沒有直接關係,你有這樣的問題:

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

然後,最後,只是更換舊代碼問,但你應該真的添加exit;後重定向頭。客戶可以忽略標題,即使在未登錄的情況下仍會加載您的頁面。

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'); 
?> 
0

我認爲你需要移動的session_start();到實際的頁面。在session_start()上使用require_once;不是一個好計劃。

相關問題