source: github/program/include/session.inc @ 4e17e6c

HEADcourier-fixdev-browser-capabilitiespdorelease-0.6release-0.7release-0.8
Last change on this file since 4e17e6c was 4e17e6c, checked in by thomascube <thomas@…>, 8 years ago

Initial revision

  • Property mode set to 100644
File size: 4.3 KB
Line 
1<?php
2
3/*
4 +-----------------------------------------------------------------------+
5 | program/include/session.inc                                           |
6 |                                                                       |
7 | This file is part of the RoundCube Webmail client                     |
8 | Copyright (C) 2005, RoundCube Dev, - Switzerland                      |
9 | All rights reserved.                                                  |
10 |                                                                       |
11 | PURPOSE:                                                              |
12 |   Provide database supported session management                       |
13 |                                                                       |
14 +-----------------------------------------------------------------------+
15 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
16 +-----------------------------------------------------------------------+
17
18 $Id$
19
20*/
21
22
23function sess_open($save_path, $session_name)
24  {
25  return TRUE;
26  }
27
28
29
30function sess_close()
31  {
32  return TRUE;
33  }
34
35
36// read session data
37function sess_read($key)
38  {
39  global $DB, $SESS_CHANGED;
40 
41  $sql_result = $DB->query(sprintf("SELECT vars, UNIX_TIMESTAMP(changed) AS changed
42                                    FROM   %s
43                                    WHERE  sess_id='%s'",
44                                   get_table_name('session'),
45                                   $key));
46
47  if ($sql_arr = $DB->fetch_assoc($sql_result))
48    {
49    $SESS_CHANGED = $sql_arr['changed'];
50
51    if (strlen($sql_arr['vars']))
52      return $sql_arr['vars'];
53    }
54
55  return FALSE;
56  }
57 
58
59// save session data
60function sess_write($key, $vars)
61  {
62  global $DB;
63 
64  $sql_result = $DB->query(sprintf("SELECT 1
65                                    FROM   %s
66                                    WHERE  sess_id='%s'",
67                                   get_table_name('session'),
68                                   $key));
69
70  if ($DB->num_rows($sql_result))
71    {
72    session_decode($vars);
73    $DB->query(sprintf("UPDATE %s
74                        SET    vars='%s',
75                               changed=NOW()
76                        WHERE  sess_id='%s'",
77                       get_table_name('session'),
78                       $vars,
79                       $key));
80    }
81  else
82    {
83    $DB->query(sprintf("INSERT INTO %s
84                        (sess_id, vars, created, changed)
85                        VALUES ('%s', '%s', NOW(), NOW())",
86                       get_table_name('session'),
87                       $key,
88                       $vars));
89    }
90
91  return TRUE;
92  }
93
94
95// handler for session_destroy()
96function sess_destroy($key)
97  {
98  global $DB;
99 
100  $DB->query(sprintf("DELETE FROM %s
101                      WHERE sess_id='%s'",
102                     get_table_name('session'),
103                     $key));
104
105  // also delete session entries in cache table
106  $DB->query(sprintf("DELETE FROM %s
107                      WHERE  session_id='%s'",
108                     get_table_name('cache'),
109                     $key));
110                     
111  return TRUE;
112  }
113
114
115// garbage collecting function
116function sess_gc($maxlifetime)
117  {
118  global $DB;
119
120  // get all expired sessions 
121  $sql_result = $DB->query(sprintf("SELECT sess_id
122                                    FROM   %s
123                                    WHERE  UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(created) > %d",
124                                   get_table_name('session'),
125                                   $maxlifetime));
126                                   
127  $a_exp_sessions = array();
128  while ($sql_arr = $DB->fetch_assoc($sql_result))
129    $a_exp_sessions[] = $sql_arr['sess_id'];
130
131 
132  if (sizeof($a_exp_sessions))
133    {
134    // delete session records
135    $DB->query(sprintf("DELETE FROM %s
136                        WHERE sess_id IN ('%s')",
137                       get_table_name('session'),
138                       join("','", $a_exp_sessions)));
139
140    // also delete session cache records
141    $DB->query(sprintf("DELETE FROM %s
142                        WHERE  session_id IN ('%s')",
143                       get_table_name('cache'),
144                       join("','", $a_exp_sessions)));
145    }
146
147  return TRUE;
148  }
149
150
151// set custom functions for PHP session management
152session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc');
153
154?>
Note: See TracBrowser for help on using the repository browser.