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

Last change on this file since 1013 was 1013, checked in by rvelices, 18 years ago

bug: new session system does not use db session handler during install.php

bug: put back function generate_key (was also used by new password generation
and new feed generation)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.0 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-01-25 00:47:31 +0000 (Wed, 25 Jan 2006) $
10// | last modifier : $Author: rvelices $
11// | revision      : $Revision: 1013 $
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}
69 
70ini_set('session.use_cookies', $conf['session_use_cookies']);
71ini_set('session.use_only_cookies', $conf['session_use_only_cookies']);
72ini_set('session.use_trans_sid', intval($conf['session_use_trans_sid']));
73ini_set('session.name', $conf['session_name']);
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.