2013-06-11 62 views
5

我登錄一個用戶,並在我的PHP腳本中創建會話變量併爲其分配用戶名(因爲它是唯一的)。如何識別PHP中會話中的用戶

<?php 
session_start(); 
//$username= getting username from database and all after loggin 
$_SESSION['user_of_mywebsie']=$username; 
// using $username now 

現在這是正確和安全的方式嗎?如果沒有,可以做些什麼? 現在會話與它的用戶名創建..

$sql_query=mysql_query("SELECT * FROM people WHERE username='$_SESSION['user_of_mywebsite']'"); 
while($row=mysql_fetch_assoc($sql_query)) 
{ 
$name=$row['name']; 
$profile_pic=$row['pro_pic_location']; 
} 

//now i will use $name and $profile_pic furthur 
+0

這些僅僅2您需要的線。 – xdbas

+0

這似乎是一個過於寬泛的問題並沒有真正有一個明確的答案,而不是一個很好的適合StackOverflow的 - 看常見問題解答:http://stackoverflow.com/faq – qJake

+1

@SpikeX:這是不是過於寬泛。也許不太清楚,但他已經展示了自己在做什麼,並詢問是否可以或是否存在隱藏的陷阱。 – Jon

回答

1

這是完全正確的! $ _SESSION var只包含您網站特定訪問者的信息,不管您寫入$ _SESSION的任何內容(但公平地說,有一些可能讀取「外部」會話,例如使用共享主機或多應用程序設置等)。

我做它究竟是這樣的(這是因爲你幾乎相同)在我的PHP登錄腳本

$_SESSION['user_name'] = $result_row->user_name; 

(這是最出演,並下載一個分叉在GitHub上,並已得到遏制由一些非常挑剔的人)。請參閱腳本here on github的更多內容。

+0

所以我應該做的會話變量與長和不可預知的名字..像$ _SESSION [「user499dqCVVEFVRVEjjkfriopeq435234ewfwqef」]等 – Zafta

+1

@Mukurpuri除非你不使用共享主機或一臺服務器上運行多個應用程序(一些雲服務器上運行這樣的)一切是安全的! – Sliq

1

這將在會話中存儲用戶名,但不是特別安全。

如果你持有在會話中的唯一的事情就是用戶名,這可能是好的,但如果你有存儲在用戶會話的個人信息,你可能要考慮增加一些安全性。

我發現會話安全這個方便的尋找快速教程http://phpsec.org/projects/guide/4.html

此外,如果您是新的PHP編程,它可能是更好的使用實現用戶管理的框架之一,因爲這已經做了很多次數,測試和完善。沒有必要在這裏重新發明輪子。

如果你使用一個框架,你可以檢查出有關框架和用戶管理,特別是這樣的回答了這個問題:https://stackoverflow.com/questions/10153619/looking-for-a-well-written-user-management-framework#10624058

0

它將工作,但你必須要注意兩件事情:

  1. 你必須確保沒有兩個或更多的用戶具有相同的名稱;
  2. 如果登錄用戶(會話有效的用戶名)被刪除,並創建了另一個名稱相同的名稱,會發生什麼情況?

在它可能的情況下發生的,在會話的用戶仍然可以發現自己登錄...但作爲其他用戶!

嘗試在會話中放置一個唯一的用戶標識。