source: trunk/include/functions_session.inc.php @ 1023

Last change on this file since 1023 was 1023, checked in by nikrou, 18 years ago

fixed problem of cookie session path
fixed problem of undefined variable conf in upgrade_feed.php
fixed problem of undefined index is_the_guest of tab variable user

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | PhpWebGallery - a PHP based picture gallery                           |
4// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
5// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
6// +-----------------------------------------------------------------------+
7// | branch        : BSF (Best So Far)
8// | file          : $RCSfile$
9// | last update   : $Date: 2006-02-03 16:19:56 +0000 (Fri, 03 Feb 2006) $
10// | last modifier : $Author: nikrou $
11// | revision      : $Revision: 1023 $
12// +-----------------------------------------------------------------------+
13// | This program is free software; you can redistribute it and/or modify  |
14// | it under the terms of the GNU General Public License as published by  |
15// | the Free Software Foundation                                          |
16// |                                                                       |
17// | This program is distributed in the hope that it will be useful, but   |
18// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
19// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
20// | General Public License for more details.                              |
21// |                                                                       |
22// | You should have received a copy of the GNU General Public License     |
23// | along with this program; if not, write to the Free Software           |
24// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
25// | USA.                                                                  |
26// +-----------------------------------------------------------------------+
27
28// The function generate_key creates a string with pseudo random characters.
29// the size of the string depends on the $conf['session_id_size'].
30// Characters used are a-z A-Z and numerical values. Examples :
31//                    "Er4Tgh6", "Rrp08P", "54gj"
32// input  : none (using global variable)
33// output : $key
34function generate_key($size)
35{
36  global $conf;
37
38  $md5 = md5(substr(microtime(), 2, 6));
39  $init = '';
40  for ( $i = 0; $i < strlen( $md5 ); $i++ )
41  {
42    if ( is_numeric( $md5[$i] ) ) $init.= $md5[$i];
43  }
44  $init = substr( $init, 0, 8 );
45  mt_srand( $init );
46  $key = '';
47  for ( $i = 0; $i < $size; $i++ )
48  {
49    $c = mt_rand( 0, 2 );
50    if ( $c == 0 )      $key .= chr( mt_rand( 65, 90 ) );
51    else if ( $c == 1 ) $key .= chr( mt_rand( 97, 122 ) );
52    else                $key .= mt_rand( 0, 9 );
53  }
54  return $key;
55}
56
57if (isset($conf['session_save_handler']) 
58  and ($conf['session_save_handler'] == 'db')
59  and defined('PHPWG_INSTALLED')) 
60{
61  session_set_save_handler('pwg_session_open', 
62    'pwg_session_close',
63    'pwg_session_read',
64    'pwg_session_write',
65    'pwg_session_destroy',
66    'pwg_session_gc'
67  );
68  ini_set('session.use_cookies', $conf['session_use_cookies']);
69  ini_set('session.use_only_cookies', $conf['session_use_only_cookies']);
70  ini_set('session.use_trans_sid', intval($conf['session_use_trans_sid']));
71  ini_set('session.name', $conf['session_name']);
72  ini_set('session.cookie_path', dirname($_SERVER['PHP_SELF']));
73}
74
75/**
76 * returns true; used when the session_start() function is called
77 *
78 * @params not use but useful for php engine
79 */
80function pwg_session_open($path, $name) 
81{
82  return true;
83}
84
85/**
86 * returns true; used when the session is closed (unset($_SESSION))
87 *
88 */
89function pwg_session_close() 
90{
91  pwg_session_gc();
92  return true;
93}
94
95/**
96 * this function returns
97 * a string corresponding to the value of the variable save in the session
98 * or an empty string when the variable doesn't exist
99 *
100 * @param string session id
101 */
102function pwg_session_read($session_id) 
103{
104  $query = '
105SELECT data
106  FROM '.SESSIONS_TABLE.'
107  WHERE id = \''.$session_id.'\'
108;';
109  $result = pwg_query($query);
110  if ($result) 
111  {
112    $row = mysql_fetch_assoc($result);
113    return $row['data'];
114  } 
115  else 
116  {
117    return '';
118  }
119}
120
121/**
122 * returns true; writes set a variable in the active session
123 *
124 * @param string session id
125 * @data string value of date to be saved
126 */
127function pwg_session_write($session_id, $data) 
128{
129  $query = '
130SELECT id
131  FROM '.SESSIONS_TABLE.'
132  WHERE id = \''.$session_id.'\'
133;';
134  $result = pwg_query($query);
135  if (mysql_num_rows($result)) 
136  {
137    $query = '
138UPDATE '.SESSIONS_TABLE.'
139  SET expiration = now()
140  WHERE id = \''.$session_id.'\'
141;';   
142    pwg_query($query);
143  } 
144  else 
145  {
146    $query = '
147INSERT INTO '.SESSIONS_TABLE.'
148  (id,data,expiration)
149  VALUES(\''.$session_id.'\',\''.$data.'\',now())
150;';
151    pwg_query($query);   
152  }
153  return true;
154}
155
156/**
157 * returns true; delete the active session
158 *
159 * @param string session id
160 */
161function pwg_session_destroy($session_id) 
162{
163  $query = '
164DELETE
165  FROM '.SESSIONS_TABLE.'
166  WHERE id = \''.$session_id.'\'
167;';
168  pwg_query($query);
169  return true;
170}
171
172/**
173 * returns true; delete expired sessions
174 * called each time a session is closed.
175 */
176function pwg_session_gc() 
177{
178  global $conf;
179
180  $query = '
181DELETE
182  FROM '.SESSIONS_TABLE.'
183  WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(expiration) > '
184  .$conf['session_length'].'
185;';
186  pwg_query($query);
187  return true;
188}
189?>
Note: See TracBrowser for help on using the repository browser.