2010-01-17 6 views
4

로그인 할 때 세션 쿠키에 모든 사용자 정보를 저장하는 것이 가장 좋습니까? 대신 querys로그인시 모든 사용자 정보 저장

$_SESSION['id'] = mysql_result($result, 0, 'id'); 
$_SESSION['name'] = mysql_result($result, 0, 'name'); 
$_SESSION['email'] = mysql_result($result, 0, 'email'); 
$_SESSION['ip'] = mysql_result($result, 0, 'regip'); 
$_SESSION['groupid'] = mysql_result($result, 0, 'group_id'); 
$_SESSION['style'] = mysql_result($result, 0, 'style'); 

많이 또는 세션에서 어쩌면 그냥 상점 ID를 사용하는 모든 페이지에 쿼리 :

select * from users where id = $_SESSION['id'] 
+0

또한 memcache를 조사한 다음 메모리에 저장할 수 있습니다. – JasonDavis

답변

2

당신이 있는지, 그들에게 많이 사용하는 거라면. 을 저장하는 데주의해야하지만 세션의 사용자 데이터는 모두입니다. 필요한 것만. 잘 쓰여진 쿼리는 리소스가 저렴합니다. 데이터베이스에 연결하는 것을 피하려고하지 마십시오. 그렇게 할 때 제대로 수행해야합니다.

memory_get_usage()을 원한다면 메모리 소비를 테스트 할 수 있습니다.

session_start(); 
echo memory_get_usage(); // 87744 
$_SESSION["user"] = array(
    "name" => "Jonathan Sampson", 
    "id"  => 54680, 
    "groupID" => 0285, 
    "email" => "[email protected]", 
    "style" => "background-color:#333;color:#f1f1f1" 
); 
echo memory_get_usage(); // 88344 

그래서 당신이 데이터의 양을 저장하기 위해 정말 사소한 것을 볼 수 있습니다 :하지만 세션 데이터는 시스템 자체에 플랫 파일에 저장되어 있습니다.

은 참조 :Cache data in PHP SESSION, or query from db each time?

+0

동의합니다. 나는 보통'UserID'를 저장하고 그 (다른 환경 변수들)을 사용하여 데이터베이스에서 사용자의 세부 사항을 얻는다. –

+3

+1 : 제 생각에 세션의 후보가되어야하는 유일한 정보는 모든 단일 페이지에 필요한 정보입니다. 그렇지 않으면 필요에 따라 데이터베이스로 돌아가십시오. – NotMe

+1

그러나 사용자가 이메일 주소를 변경하면 어떻게됩니까? 개발자는 세션 var를 수정해야한다는 것을 기억해야합니다. 매번 사용자 ID 만 저장하고 나머지는 DB에서 가져 오는 경우이 문제에 대해 걱정할 필요가 없습니다. –

2

I하려는 DB에 저장된 각 사용자에 대해 (소금) 해쉬 생성 :

$salt = 'asdjnvdskflds'; 
$hash = md5($salt . $email); 

그런 다음 세션에서 해시를 저장합니다. 그렇게하면 매번 사용자 데이터를 호출 할 수 있습니다. 또한 사용자가 일부 데이터를 변경하면 세션을 업데이트 할 필요가 없다는 이점이 있습니다.