2011-12-08 48 views
5

我正在構建一個基本的應用程序,我想弄清楚如何將用戶信息從login.php傳遞給index.php。以下是我到目前爲止:我有一個登錄頁面,通過用戶類通過數據庫提交和驗證用戶。之後,將用戶屬性設置爲從數據庫返回的值。從那裏,id被存儲在一個會話中。我將如何去訪問頁面間的用戶信息。我應該建立一個構造方法來查詢帶有會話ID的數據庫嗎?這是一種安全還是有效的方法?一個例子是堆棧溢出。您可以在每個頁面的頂部看到您的用戶名。如何在登錄後訪問用戶信息?

+0

爲什麼不將用戶信息存儲到會話中? –

回答

6

聽起來像是你有會話處理下來的總體思路。所以你只是問什麼方法是安全的,或者優化了什麼。

儘可能在會話或cookie中存儲儘可能少的信息是很常見的,所以您不會將用戶打開到簡單的釣魚攻擊。所以理想情況下,這意味着您在數據庫中有一個會話表,您可以與會話ID進行交叉引用。

是的,你會在每個頁面加載上運行一個查詢,但這在標準站點上並不是那麼多。只要你正確地處理你的意見,它並不是不安全的。這樣,如果用戶操縱他們的會話信息,你將不會被關閉。

或者,如果您只是使用用戶標識和用戶名,則可以安全地將它們存儲在會話中,並避免在每次加載頁面時進行查詢。只是不要瘋狂地填充會話或cookie數據,而是用非常長的數組填充非常用的信息。

+0

+1;關於會話數據安全的好處 –

+0

@凱回答我的問題給T,謝謝。 – Scott

4

在登錄頁,存儲用戶在會話從數據庫中的信息,在其他頁面上,你可以直接打電話給他們

<?php 
session_start(); 
$_SESSION['user'] = $username; 

,並在另一個網站上

<?php 
session_start(); 
$_SESSION['user']; 
+0

回到了stackoverflow的例子,當你進入你的個人資料頁面時,那裏有很多數據:你回答的問題,你問過的問題等等。你顯然不會把所有這些存儲在一個會話中,那麼如何使用$ _SESSSION ['USER']和id從數據庫中獲取所有數據? – Scott

+0

我想你的sql結構中有你的用戶的主要id,只需在$ _SESSION ['id']中存儲id以及將在每個站點上使用的一些基本信息(如用戶名和名稱),如果你以後想要獲取一些困難和具體的查詢,只需從$ _SESSION ['id']獲取id並在sql查詢中使用它 –

1

我建立一個基本的應用程序,我試圖弄清楚我如何將用戶信息從login.php傳遞給index.php

一種方式是共享數據存儲爲PHP會話數據:http://www.tizag.com/phpT/phpsessions.php

<?php 
session_start(); // start the session 

$_SESSION['views'] = 1; // store session data 
echo "Pageviews = ". $_SESSION['views']; //retrieve data 

商店,你需要所有頁面的用戶數據。您可以將擴展數據留在數據庫中,因此您不必預先查詢大量數據(例如您在SO上的配置文件頁面上看到的詳盡統計數據)。

然後,您不必在每個頁面上重新查詢用戶數據。只需從會話數據中檢索它。

我應該只是建立一個構造方法來查詢與會話ID數據庫?這是一種安全還是有效的方法?

如果您對所有內容都使用相同的DB帳戶,那麼在查詢用戶表時就沒有任何內在不安全的問題。你不會讓自己面臨比你已經做的任何其他查詢更多的風險。

如果您在訪問數據庫時擔心安全問題,建議您瞭解一個具體問題:防止SQL injection attacks

參見:How can I prevent SQL injection in PHP?

相關問題