File: session-set-save-handler.xml

package info (click to toggle)
php-doc 20061001-1
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 45,764 kB
  • ctags: 1,611
  • sloc: xml: 502,485; php: 7,645; cpp: 500; makefile: 297; perl: 161; sh: 141; awk: 28
file content (162 lines) | stat: -rw-r--r-- 4,679 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.14 $ -->
<!-- splitted from ./en/functions/session.xml, last change in rev 1.23 -->
  <refentry id="function.session-set-save-handler">
   <refnamediv>
    <refname>session_set_save_handler</refname>
    <refpurpose>
     Sets user-level session storage functions
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
      <type>bool</type><methodname>session_set_save_handler</methodname>
      <methodparam><type>callback</type><parameter>open</parameter></methodparam>
      <methodparam><type>callback</type><parameter>close</parameter></methodparam>
      <methodparam><type>callback</type><parameter>read</parameter></methodparam>
      <methodparam><type>callback</type><parameter>write</parameter></methodparam>
      <methodparam><type>callback</type><parameter>destroy</parameter></methodparam>
      <methodparam><type>callback</type><parameter>gc</parameter></methodparam>
     </methodsynopsis>
    <para>
     <function>session_set_save_handler</function> sets the user-level
     session storage functions which are used for storing and
     retrieving data associated with a session.  This is most useful
     when a storage method other than those supplied by PHP sessions
     is preferred.  i.e. Storing the session data in a local database.
     &return.success;
    </para>
    <note>
     <para>
      The "write" handler is not executed until after the output
      stream is closed.  Thus, output from debugging statements in the
      "write" handler will never be seen in the browser.  If debugging
      output is necessary, it is suggested that the debug output be
      written to a file instead.
     </para>
    </note>
    <para>
     The following example provides file based session
     storage similar to the PHP sessions default save handler
     <parameter>files</parameter>.  This example could easily be
     extended to cover database storage using your favorite PHP
     supported database engine.
    </para>
    <para>
     Read function must return string value always to make save
     handler work as expected. Return empty string if there is no data
     to read. Return values from other handlers are converted to
     boolean expression. &true; for success, &false; for failure.
    </para>
    <warning>
     <para>
      Write and Close handlers are called after destructing objects since PHP
      5.0.5. Thus destructors can use sessions but session handler can't use
      objects. In prior versions, they were called in the opposite order. It
      is possible to call <function>session_write_close</function> from the
      destructor to solve this chicken and egg problem.
     </para>
    </warning>
    <para>
     <example>
      <title>
       <function>session_set_save_handler</function> example
      </title>
      <programlisting role="php">
<![CDATA[
<?php
function open($save_path, $session_name) 
{
  global $sess_save_path;
  
  $sess_save_path = $save_path;
  return(true);
}

function close() 
{
  return(true);
}

function read($id) 
{
  global $sess_save_path;
  
  $sess_file = "$sess_save_path/sess_$id";
  return (string) @file_get_contents($sess_file);
}

function write($id, $sess_data) 
{
  global $sess_save_path;
  
  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "w")) {
    $return = fwrite($fp, $sess_data);
    fclose($fp);
    return $return;
  } else {
    return(false);
  }

}

function destroy($id) 
{
  global $sess_save_path;
  
  $sess_file = "$sess_save_path/sess_$id";
  return(@unlink($sess_file));
}

function gc($maxlifetime) 
{
  global $sess_save_path;
  
  foreach (glob("$sess_save_path/sess_*") as $filename) {
    if (filemtime($filename) + $maxlifetime < time()) {
      @unlink($filename);
    }
  }
  return true;
}

session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

session_start();

// proceed to use sessions normally

?>
]]>
      </programlisting>
     </example>
    </para>
    <para>
     See also the <link linkend="ini.session.save-handler">session.save_handler</link>
     configuration directive.
    </para>
   </refsect1>
  </refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->