-
Notifications
You must be signed in to change notification settings - Fork 56
/
session-destroy.xml
157 lines (147 loc) · 5.64 KB
/
session-destroy.xml
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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 682510e91d1f19fb59d2f7aef6ab370e8af842a1 Maintainer: hirokawa Status: ready -->
<!-- Credits: mumumu -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.session-destroy">
<refnamediv>
<refname>session_destroy</refname>
<refpurpose>セッションに登録されたデータを全て破棄する</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>session_destroy</methodname>
<void/>
</methodsynopsis>
<simpara>
<function>session_destroy</function>は、現在のセッションに
関連づけられたすべてのデータを破棄します。この関数は、
セッションに関するグローバル変数を破棄しません。
また、セッションクッキーを破棄しません。
セッション変数の利用を再開するには <function>session_start</function>
をコールする必要があります。
</simpara>
<note>
<simpara>
通常のコードでは、<function>session_destroy</function> を呼ぶ必要はありません。
セッションデータを破棄するよりも、 $_SESSION 配列をクリーンアップしてください。
</simpara>
</note>
<para>
セッションを切断するには、
セッション ID の割り当ても解除する必要があります。セッション ID の受け渡しに
クッキーが使用されている場合(デフォルト)には、セッションクッキーも
削除されなければなりません。
そのために <function>setcookie</function> が利用できます。
</para>
<para>
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
が有効になっている場合、
古くなった セッションID のクッキーを削除する必要はありません。
なぜなら、セッションモジュールはセッションIDに紐付いたデータがないとき、
セッションID のクッキーを受け入れないからです。
全てのサイトで、
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
を有効にすることを推奨します。
</para>
<warning>
<para>
すぐにセッションを削除してしまうと、
望まない結果が起こる可能性があります。
並列にリクエストが行われたときに、
他のリクエストの接続は突然データが消えたように見えるかもしれません。
たとえば、JavaScript または/もしくは
URLリンクからのリクエストが同時に実行された場合です。
</para>
<para>
現在のセッションモジュールは、空のセッションIDを受け入れません。
しかし、すぐにセッションを削除してしまうと、
クライアント(ブラウザ)サイドとの競合によって、
空のセッションIDクッキーが発生するかもしれません。
これにより、不必要なのにクライアント側が
たくさんのセッションIDを作ってしまうことになります。
</para>
<para>
こうした事象を防ぐためには、
$_SESSION に削除時のタイムスタンプを設定し、
それより後のアクセスを拒否するようにしなければなりません。
もしくは、アプリケーションが同時に
複数のリクエストを受け付けないようにすることです。
同じことは、<function>session_regenerate_id</function>
関数にも当てはまります。
</para>
</warning>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
&no.function.parameters;
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><varname>$_SESSION</varname>でセッションを破棄する</title>
<programlisting role="php">
<![CDATA[
<?php
// セッションの初期化
// session_name("something")を使用している場合は特にこれを忘れないように!
session_start();
// セッション変数を全て解除する
$_SESSION = array();
// セッションを切断するにはセッションクッキーも削除する。
// Note: セッション情報だけでなくセッションを破壊する。
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// 最終的に、セッションを破壊する
session_destroy();
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><link linkend="ini.session.use-strict-mode">session.use_strict_mode</link></member>
<member><function>session_reset</function></member>
<member><function>session_regenerate_id</function></member>
<member><function>unset</function></member>
<member><function>setcookie</function></member>
</simplelist>
</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:"~/.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
-->