2012-11-16 19 views
0

管理員和用戶都可以登錄。登錄後,他們可以瀏覽相同的頁面。php,管理員和用戶從同一瀏覽器登錄導致會話變量被非法更改

管理員和用戶可以選擇插入,編輯和刪除項目。

管理員可以爲任何人創建的任何項目執行所有這3項任務。但用戶只能爲他/她自己創建的項目執行這些任務。因此,在數據庫AS TO中追蹤誰創建了特定項目。

$_SESSION['admin_user']如果是管理員則分配1,否則分配2。此會話變量決定該頁面是針對管理員還是任何其他用戶。

但是,如果管理員登錄,然後另一個用戶也從同一瀏覽器登錄,然後會話變量獲取後者的值。

無論出於何種原因,讓我們假設管理員和用戶可以同時登錄到同一瀏覽器。

如何使之成爲可能,即使這兩種不同類型的用戶在提到的方式進入現場,他們都將獲得其相應的頁面(即當在菜單鏈路S1管理員點擊他/她將獲得預期的頁面,對於來自同一瀏覽器的任何用戶同樣如此)?

+0

發佈您的代碼,您如何爲會話分配值 –

+0

如此簡單。如果登錄是從管理登錄部分,然後'$ _SESSION ['admin_user'] = 1',如果它是從用戶登錄部分,然後會話變量分配2. –

+0

從我理解你分配一個不同的值到同一個變量,你可能應該有兩個變量:$ _SESSION ['is_admin'] = 1,$ _SESSION ['is_user'] = 1 – wakooka

回答

0

$ _SESSION ['admin_user']被分配1,如果是管理員或2否則。此會話變量決定該頁面是針對管理員還是任何其他用戶。

if ($_SESSION['user']==1){ 

echo 'wHAT ADMIN CAN DO normally all even delete'; 

}else if($_SESSION['user']==2){ 

echo 'Maybe only add , view , update'; 

} 

請務必使重定向頭如果您的用戶使用同一個瀏覽器,那麼你可以,也沒有對正常的會話功能接力,因爲它在分享的內容,以非限制用戶進入頁面

+0

這是如何解決我的問題? –

+0

您的網頁上有多少管理員和用戶,您的客戶是否擁有唯一的ID? –

+0

1 admin,很多用戶。顯然用戶確實有獨特的ID。 –

0

瀏覽器。這就是爲什麼你可以打開新的窗口/標籤,例如。

所以我們不能使用cookie來創建會話,而是我們需要發送會話信息與URL中的每個請求。

選項1:使其成爲單頁網站並使用ajax加載數據。

方法2:在用戶的URL會話ID:■

編輯:更簡單的辦法是讓用戶使用隱身模式。然後會話不與其他實例共享。我使用它在不同的Gmail帳戶有時登錄兩次。 (不同的瀏覽器供應商用自己的名稱調用函數)

編輯2:首先,會話由服務器在瀏覽器中設置cookie創建。該cookie只包含一個「隨機」字符串。該字符串可以對應於服務器上的文件(最常見)或數據庫中的一行(實際上,如果您有多個Web服務器,並且前面有一個負載均衡器,如果另一個用戶在哪裏猜這個隨機字符串,他將訪問到用戶會話(這也被稱爲會話劫持)

而不是存儲在cookie中的會話,你可以保持它的URL像http://www.example.com/?sess_id=jdR3Tfs。你可以很容易地建立這個邏輯你自己,但在大多數Web框架都有幫助人員來做這件事,例如在PHP中使用

在php中設置。INI

session.use_cookies=0 
session.use_trans_sid=1 

有時它需要手動抓取會話ID在上述配置,如果我沒記錯的話應該是這樣的:

session_id($_GET['sessionid']); 
session_start(); 

session_id($_GET['PHPSESSID']); 
session_start(); 

可以肯定的你可以做print_r($_GET)或直觀地看看這個創建的URL。

否則,你可以更多的手動

<?php 
// testpage.php 
session_start(); 
if (isset($_SESSION['test']){ 
    $_SESSION['test'] = 'Back again!'; 
} 
$_SESSION['test'] = 'Hello world!'; 
?> 
<p><?php echo $_SESSION['test']; ?></p> 
<a href="testpage.php?<?php echo htmlspecialchars(SID); ?>">Click me</a>. 

編輯3做到這一點: 另一種方式,當你仍然可以使用的cookies是用戶啓用了「隱私瀏覽」,請參閱如何啓用此http://techlogon.com/2012/05/10/comparison-of-private-browsing-in-ie-chrome-and-firefox/更多信息

+0

假設url中的請求變量是'user_type';現在用戶首先登錄,因此變量的值爲2,現在管理員使用同一瀏覽器登錄,因此變量的值爲1;現在用戶刷新頁面並點擊鏈接轉到不同的頁面。請求變量將保持值1而不是2. –

+0

不,忘記$ session將無法工作。你需要在URL中使用session_id =(長隨機字符串)。這是保存在數據庫與時間戳來計算會話超時。在該表中,您可以保存關於會話的其他信息。 – Nils

+1

你的想法與user_type將工作,但它會很愚蠢,因爲用戶可以在沒有身份驗證的情況下在管理員和用戶之間切換。在服務器端,您將讀取user_type並返回該用戶類型的頁面,並確保所有鏈接都包含正確的用戶類型。不要這樣做!如果擔心安全問題,請在URL中使用會話ID。 – Nils

相關問題