teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

参考サイトとlogout\.phpに関する解説を追加

2016/03/26 12:05

投稿

lib
lib

スコア446

answer CHANGED
@@ -5,6 +5,13 @@
5
5
  していきます。
6
6
  またこの設計の前提条件ですが**、userid を partidとして扱いたいという要件**を推測で決め打ちしている点をご了解いただければ。
7
7
 
8
+ [追記] ここから
9
+ この解説の参考サイト:
10
+ 1.[SQL](http://hissori18.web.fc2.com/)
11
+ 2.[PHPのセッション](http://www.phppro.jp/school/phpschool/vol8/1)
12
+ 3.[htmlとフォーム](http://www.kanzaki.com/docs/html/htminfo31.html)
13
+ [追記] ここまで
14
+
8
15
  ---
9
16
 
10
17
  以下解説
@@ -202,4 +209,70 @@
202
209
  </ul>
203
210
  </body>
204
211
  </html>
205
- ```
212
+ ```
213
+
214
+ [追記]
215
+ logout.php
216
+
217
+ 閲覧の必要がなくなった時にログアウトして表示される画面
218
+ また、セッションタイムアウトした時には、セッションタイムアウトがわかるメッセージが表示される
219
+ 主に$_SESSION["USERID"]が存在有無にかかわらずメッセージが表示される
220
+
221
+ ここでは、設計前提に従い、
222
+ PARTIDとして扱いたいため $_SESSION["USERID"]をPARTIDとして変更させる必要がある。
223
+
224
+ ```php
225
+ <?php
226
+ session_start();
227
+
228
+ // [teratail]$_SESSION["PARTID"]が存在しないときにログアウトしましたと表示される
229
+ if (isset($_SESSION["PARTID"])) {
230
+ $errorMessage = "ログアウトしました。";
231
+ }
232
+ else {
233
+ $errorMessage = "セッションがタイムアウトしました。";
234
+ }
235
+ // セッション変数のクリア
236
+ $_SESSION = array();
237
+ // クッキーの破棄は不要
238
+ //if (ini_get("session.use_cookies")) {
239
+ // $params = session_get_cookie_params();
240
+ // setcookie(session_name(), '', time() - 42000,
241
+ // $params["path"], $params["domain"],
242
+ // $params["secure"], $params["httponly"]
243
+ // );
244
+ //}
245
+ // セッションクリア
246
+ @session_destroy();
247
+ ?>
248
+
249
+ <!doctype html>
250
+ <html>
251
+ <head>
252
+ <meta charset="UTF-8">
253
+ <title>サンプルアプリケーション</title>
254
+ </head>
255
+ <body>
256
+ <h1>ログイン機能 サンプルアプリケーション</h1>
257
+ <div><?php echo $errorMessage; ?></div>
258
+ <ul>
259
+ <li><a href="login.php">ログイン画面に戻る</a></li>
260
+ </ul>
261
+ </body>
262
+ </html>
263
+ ```
264
+
265
+ [終わりに]
266
+
267
+ ---
268
+
269
+ 以上で解説を終えますが、
270
+
271
+ 当初の質問から懸念していた内容は、**どこかのサイトを参照したと**いう記述がなかったため
272
+ どの回答をすべきかという点がわからず推測で対応することになりました。
273
+ 以降質問する際は、 まず なにを したか  そして なにを 調べて どう 判断(感じた)か。
274
+ それを [5H1H](https://ja.wikipedia.org/wiki/5W1H)形式であらかじめ質問の整理を行うようにしてください。**自分が困った内容を、アヒルに説明してみる。**
275
+ というのがありますが。僕は幼稚園に説明するとしたら。をお勧めします。
276
+ そうすることで、回答を持ってる方が即時で回答ができたり、また、別の質問者がこの回答や質問を
277
+ ご覧になった時に参考になることがあります。
278
+

1

ソースコードの解説を修正。

2016/03/26 12:05

投稿

lib
lib

スコア446

answer CHANGED
@@ -37,7 +37,22 @@
37
37
  以下各ソースごとの解説。 コメントで適宜入れています。
38
38
  ---
39
39
 
40
+ main.phpでは、useridの表示ではなくあらかじめlogin.phpで入力されたpartidを
41
+ 表示している。以下大まかな処理のイメージを順番に
42
+ (1) login.phpで入力フォームを作成。
43
+
44
+ (2) login.phpで入力からpartid, passwordを受け取る。
45
+
46
+ (3) 事前チェックで入力値が空でないことを確認して、認証させる。
47
+
48
+ (4) 認証は、partidがデータベースに存在しているか。
49
+
50
+ (5) データが存在すると、main.phpを表示するようにしている。
51
+
52
+
40
53
  login.php
54
+ 主にユーザーからの入力と検証、またログインチェック(データが存在するか)を行う。
55
+ ログインに成功(データの存在確認)すると、main.phpを表示させる。
41
56
 
42
57
  ```php
43
58
  <?php
@@ -107,7 +122,7 @@
107
122
  // [teratail]ここで入力されたpartidをセッション用の変数に代入している。
108
123
  // $_SESSION["PARTID"] = 値
109
124
  // 以降は、PHP間セッションが有効な間 $_SESSION["PARTID"]として受け取り表示や検証が行える。
110
- $_SESSION["PARTID"] = $_POST["partid"]; // <- この記述が代入です。
125
+ $_SESSION["PARTID"] = $_POST["partid"]; // <- [teratail]この記述が代入で、かつ必要な絶対条件です。
111
126
  // [teratail]この渡し方は、あらかじめFORMから入力されたname="partid"の属性をもつ、タグinputから受け取っている。
112
127
 
113
128
  header("Location: main.php");
@@ -154,15 +169,11 @@
154
169
  </html>
155
170
  ```
156
171
 
157
- main.phpでは、useridの表示ではなくあらかじめlogin.phpで入力されたpartidを
158
- 表示している。以下順番に
159
- ・login.phpで入力フォームを作成。
172
+ main.php
160
- ・login.phpで入力からpartid, passwordを受け取る。
161
- ・事前チェックで入力値が空でないことを確認して、認証させる。
162
- ・認証は、partidがデータベースに存在しているか。
163
- ・データが存在すると、main.phpを表示するようにしている。
164
173
 
174
+ ログインに成功すると表示される画面、また画面ではセッションに$_SESSION["PARTID"]が存在するかをチェックし存在しなければ、直ちにlogout.phpを表示させる。
165
- main.php
175
+ ログインに成功してれば、$_SESSION["PARTID"]は存在しているので、画面に表示される。
176
+
166
177
  ```php
167
178
  <?php
168
179
  session_start();