Mercurial > defr > drupal > core
comparison includes/session.inc @ 11:589fb7c02327 6.5
Drupal 6.5
author | Franck Deroche <webmaster@defr.org> |
---|---|
date | Tue, 23 Dec 2008 14:32:19 +0100 |
parents | acef7ccb09b5 |
children | 8b6c45761e01 |
comparison
equal
deleted
inserted
replaced
10:6f15c9d74937 | 11:589fb7c02327 |
---|---|
1 <?php | 1 <?php |
2 // $Id: session.inc,v 1.44.2.2 2008/08/12 10:29:03 dries Exp $ | 2 // $Id: session.inc,v 1.44.2.3 2008/09/17 07:53:08 goba Exp $ |
3 | 3 |
4 /** | 4 /** |
5 * @file | 5 * @file |
6 * User session handling functions. | 6 * User session handling functions. |
7 */ | 7 */ |
55 | 55 |
56 function sess_write($key, $value) { | 56 function sess_write($key, $value) { |
57 global $user; | 57 global $user; |
58 | 58 |
59 // If saving of session data is disabled or if the client doesn't have a session, | 59 // If saving of session data is disabled or if the client doesn't have a session, |
60 // and one isn't being created ($value), do nothing. | 60 // and one isn't being created ($value), do nothing. This keeps crawlers out of |
61 // the session table. This reduces memory and server load, and gives more useful | |
62 // statistics. We can't eliminate anonymous session table rows without breaking | |
63 // the throttle module and the "Who's Online" block. | |
61 if (!session_save_session() || (empty($_COOKIE[session_name()]) && empty($value))) { | 64 if (!session_save_session() || (empty($_COOKIE[session_name()]) && empty($value))) { |
62 return TRUE; | 65 return TRUE; |
63 } | 66 } |
64 | 67 |
65 $result = db_result(db_query("SELECT COUNT(*) FROM {sessions} WHERE sid = '%s'", $key)); | 68 db_query("UPDATE {sessions} SET uid = %d, cache = %d, hostname = '%s', session = '%s', timestamp = %d WHERE sid = '%s'", $user->uid, isset($user->cache) ? $user->cache : '', ip_address(), $value, time(), $key); |
66 | 69 if (db_affected_rows()) { |
67 if (!$result) { | |
68 // Only save session data when when the browser sends a cookie. This keeps | |
69 // crawlers out of session table. This reduces memory and server load, | |
70 // and gives more useful statistics. We can't eliminate anonymous session | |
71 // table rows without breaking throttle module and "Who's Online" block. | |
72 if ($user->uid || $value || count($_COOKIE)) { | |
73 db_query("INSERT INTO {sessions} (sid, uid, cache, hostname, session, timestamp) VALUES ('%s', %d, %d, '%s', '%s', %d)", $key, $user->uid, isset($user->cache) ? $user->cache : '', ip_address(), $value, time()); | |
74 } | |
75 } | |
76 else { | |
77 db_query("UPDATE {sessions} SET uid = %d, cache = %d, hostname = '%s', session = '%s', timestamp = %d WHERE sid = '%s'", $user->uid, isset($user->cache) ? $user->cache : '', ip_address(), $value, time(), $key); | |
78 | |
79 // Last access time is updated no more frequently than once every 180 seconds. | 70 // Last access time is updated no more frequently than once every 180 seconds. |
80 // This reduces contention in the users table. | 71 // This reduces contention in the users table. |
81 if ($user->uid && time() - $user->access > variable_get('session_write_interval', 180)) { | 72 if ($user->uid && time() - $user->access > variable_get('session_write_interval', 180)) { |
82 db_query("UPDATE {users} SET access = %d WHERE uid = %d", time(), $user->uid); | 73 db_query("UPDATE {users} SET access = %d WHERE uid = %d", time(), $user->uid); |
83 } | 74 } |
75 } | |
76 else { | |
77 // If this query fails, another parallel request probably got here first. | |
78 // In that case, any session data generated in this request is discarded. | |
79 @db_query("INSERT INTO {sessions} (sid, uid, cache, hostname, session, timestamp) VALUES ('%s', %d, %d, '%s', '%s', %d)", $key, $user->uid, isset($user->cache) ? $user->cache : '', ip_address(), $value, time()); | |
84 } | 80 } |
85 | 81 |
86 return TRUE; | 82 return TRUE; |
87 } | 83 } |
88 | 84 |