-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathsessionhandlerinterface.xml
More file actions
172 lines (150 loc) · 5.19 KB
/
sessionhandlerinterface.xml
File metadata and controls
172 lines (150 loc) · 5.19 KB
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
163
164
165
166
167
168
169
170
171
172
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 8859c8b96cd9e80652813f7bcf561432a5e9f934 Maintainer: samesch Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.sessionhandlerinterface" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Die Schnittstelle SessionHandlerInterface</title>
<titleabbrev>SessionHandlerInterface</titleabbrev>
<partintro>
<!-- {{{ SessionHandlerInterface intro -->
<section xml:id="sessionhandlerinterface.intro">
&reftitle.intro;
<para>
<classname>SessionHandlerInterface</classname> ist eine Schnittstelle, die
den minimalen Prototyp für die Erstellung einer benutzerdefinierten
Sessionverwaltung definiert. Um eine benutzerdefinierte Sessionverwaltung
an <function>session_set_save_handler</function> zu übergeben, die ihren
<abbrev>OOP</abbrev>-Aufruf verwendet, kann die Klasse diese Schnittstelle
implementieren.
</para>
<para>
Es ist zu beachten, dass die Callback-Methoden dieser Klasse dazu gedacht
sind, intern von PHP aufgerufen zu werden und nicht aus dem
Anwenderprogramm aufgerufen werden sollen.
</para>
</section>
<!-- }}} -->
<section xml:id="sessionhandlerinterface.synopsis">
&reftitle.interfacesynopsis;
<!-- {{{ Synopsis -->
<classsynopsis class="interface">
<oointerface>
<interfacename>SessionHandlerInterface</interfacename>
</oointerface>
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.sessionhandlerinterface')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='SessionHandlerInterface'])">
<xi:fallback/>
</xi:include>
</classsynopsis>
<!-- }}} -->
</section>
<section xml:id="sessionhandlerinterface.examples">
&reftitle.examples;
<example>
<title>
Ein Beispiel mit <classname>SessionHandlerInterface</classname>
</title>
<para>
Das folgende Beispiel bietet eine dateibasierte Session-Speicherung
ähnlich dem standardmäßigen PHP-Session-Speicherverwalter
(PHP Session Standard Save Handler) <parameter>files</parameter>. Dieses
Beispiel kann leicht erweitert werden, um die Speicherung in einer
Datenbank mit der bevorzugten von PHP unterstützten Datenbank-Engine zu
ermöglichen.
</para>
<para>
Zu beachten ist, dass wir den OOP-Prototyp zusammen mit
<function>session_set_save_handler</function> verwenden und die
Shutdown-Funktion mit dem Parameter flag der Funktion registrieren. Dies
wird im Allgemeinen empfohlen, wenn Objekte als Session-Speicherverwalter
registriert werden.
</para>
<caution>
<para>
Der Kürze halber wird in diesem Beispiel auf eine Überprüfung der
Eingaben verzichtet. Allerdings handelt es sich bei den
<literal>$id</literal>-Parametern um vom Benutzer gelieferte Werte, die
unbedingt überprüft und bereinigt werden müssen, um Schwachstellen,
&zb; Path-Traversal-Probleme, zu vermeiden. <emphasis>Dieses Beispiel
sollte daher nicht unverändert in Produktivumgebungen verwendet
werden.</emphasis>
</para>
</caution>
<programlisting role="php">
<![CDATA[
<?php
class MySessionHandler implements SessionHandlerInterface
{
private $savePath;
public function open($savePath, $sessionName): bool
{
$this->savePath = $savePath;
if (!is_dir($this->savePath)) {
mkdir($this->savePath, 0777);
}
return true;
}
public function close(): bool
{
return true;
}
#[\ReturnTypeWillChange]
public function read($id)
{
return (string) @file_get_contents("$this->savePath/sess_$id");
}
public function write($id, $data): bool
{
return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
}
public function destroy($id): bool
{
$file = "$this->savePath/sess_$id";
if (file_exists($file)) {
unlink($file);
}
return true;
}
#[\ReturnTypeWillChange]
public function gc($maxlifetime)
{
foreach (glob("$this->savePath/sess_*") as $file) {
if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
unlink($file);
}
}
return true;
}
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
// Fortfahren mit dem Setzen und Abrufen von Werten anhand der
// Schlüssel von $_SESSION
]]>
</programlisting>
</example>
</section>
</partintro>
&reference.session.entities.sessionhandlerinterface;
</reference>
<!-- 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:"~/.phpdoc/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
-->