質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

解決済

2回答

2323閲覧

ログアウトボタン押下で、セッション削除

Roo

総合スコア55

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

0クリップ

投稿2018/09/25 10:32

編集2018/09/25 13:24

###前提
phpでログイン機能実装中
ログアウトボタン押下で、セッション削除し、ログインページを表示したい。
###質問点
セッションが切れません、以下のコード参照
ご助言いただきたく宜しくお願いいたします。

php

1<?php 2session_start(); 3 4if (!isset($_SESSION["NAME"])) { 5 header("Location: 403.php"); 6 exit; 7} 8 9try { 10 $db = new PDO('mysql:host=〇〇;dbname=〇〇;charset=utf8', '〇〇’, '〇〇'); 11 $stt = $db->prepare('SELECT sdate FROM userdata'); 12 $stt->execute(); 13 } catch(PDOException $e) { 14 die('エラーメッセージ:'.$e->getmessage()); 15 } 16 17?> 18<!doctype html> 19<html> 20 <head> 21 <meta charset="UTF-8"> 22 <title>メイン</title> 23 24 <link rel="stylesheet" href="test.css"> 25 </head> 26 <body> 27 <div class="parent"> 28 <h1></h1> 29 30 31 <?php 32 echo('最終ログイン時間'); while ($row = $stt->fetch()) 33 echo $row["sdate"];?> 34 <div class="kakko" > 35 36 <form method="POST" action="session.php"> <input type="submit" id="logout" name="logout" value="logout" /> 37 38 39<?php 40 if (isset($_POST["logout"])) { 41 42$_SESSION = array(); 43if (isset($_COOKIE[session_name()])) { 44 setcookie(session_name(), '', time()-42000, '/'); 45} 46session_destroy(); 47 header("Location: login.php"); 48 49} else { 50 $errorMessage = ""; 51} 52} 53?> 54 55 </div> 56 <p>※当サイトは3分間で強制ログアウトされます。</p> 57 </div> 58 <ul> 59 60 61 </body> 62 </form> 63</html> 64 65 66

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/25 10:38

「セッションが切れていない」はどのように確認されたのでしょうか?提示のコードはどのような位置付けのコードですか?
m.ts10806

2018/09/25 10:39

提示のコードがこのファイルのすべてとしたらsession_start()が宣言されていないようですがコピペ漏れでしょうか
Roo

2018/09/25 13:28

記載漏れ失礼いたしました。お忙しい中返信ありがとうございます。  log out ボタン押下→セッション削除→ログイン画面表示  なのですが、log outボタン押下→セッション削除(おそらくできていない)→403ページ(直接my pageを叩いた場合のページに飛んでしまいます)
m.ts10806

2018/09/25 13:37

提示コードは実際のコードそのままですか?全角の’が入っているのでそもそもエラーになると思いますが・・
Roo

2018/09/25 13:39

遅くまで、返答にお付き合いいただき感謝いたします。。。記載場所のミスでした。
m.ts10806

2018/09/25 13:48

超私事ですが今週はかなり遅い夏休みがとれたので若干時間に余裕があります。ところで、$_SESSION["NAME"]ってどこで定義されるのでしょうか?提示されたコード内には見当たりませんが・・てことは!isset()は常にtrueなので403.phpへのリダイレクトは避けられないと思います
guest

回答2

0

ベストアンサー

流れ的にはこう

PHP

1<?PHP 2session_start(); 3$x=filter_input(INPUT_POST,"x"); 4$user=filter_input(INPUT_POST,"user"); 5if($x==="logout"){ 6 if (ini_get("session.use_cookies")) { 7 $params = session_get_cookie_params(); 8 setcookie(session_name(), '', time() - 42000); 9 } 10 session_destroy(); 11 unset($_SESSION["user"]); 12} 13if(!is_null($user) and $user!=="" and $x==="login"){ 14 $_SESSION["user"]=$user; 15} 16print_r($_SESSION); 17?> 18<form method="post"> 19<input type="text" name="user" value="hoge"><br> 20<input type="submit" name="x" value="login"> 21<input type="submit" name="x" value="logout"> 22</form> 23<a href="?a=1">1</a><br> 24<a href="?a=2">2</a><br> 25<a href="?a=3">3</a><br> 26

loginしたあとは、1,2,3のどれに移動してもuserは引き継がれる
logoutすると消える。

投稿2018/09/26 01:06

yambejp

総合スコア114505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Roo

2018/09/26 05:59

お忙しい中ご返信感謝いたします。 ありがとうございました。
guest

0

header()はレスポンスボディを出力する前に呼び出す必要があります。

header — 生の HTTP ヘッダを送信する

以下のコードを、session_start()の直後の行に移動してください。
※また、★部分でexitを入れてください。リダイレクトしているので以降の処理は不要。

php

1 if (isset($_POST["logout"])) { 2 3$_SESSION = array(); 4if (isset($_COOKIE[session_name()])) { 5 setcookie(session_name(), '', time()-42000, '/'); 6} 7session_destroy(); 8 header("Location: login.php"); 9 exit; //★ 10} else { 11 $errorMessage = ""; 12} 13} 14

注:mts10806さんがコメントで指摘されている $_SESSION["NAME"] については、ログイン時に設定していると仮定しています。

投稿2018/09/25 13:55

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Roo

2018/09/26 05:58

お忙しい中ご返信感謝いたします。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問