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

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

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

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

Q&A

解決済

1回答

8056閲覧

PHPでリダイレクトループを回避する方法

uutarou10

総合スコア12

PHP

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

0グッド

1クリップ

投稿2015/10/06 15:49

現在初めてPHPを使ってWebアプリを制作しています。
初心者ですので見当違いのことを言っているかもしれませんのでそのときは指摘をお願いします。

早速本題なのですが、ログイン機能のあるWebアプリを制作している中で、セッションにidを保存し、各ページの一番最初でセッションに値がセットされているかを判断するコードを書き、ログインしていたら特定のページに飛ばすという処理をしています。

php

1session_start(); 2if (isset($_SESSION['id'])) { 3 //ログインしてたら 4 header('Location: todo.php'); 5}

以上のようなコードです。
これを別ファイルにして各ページからincludeで読み込んでいるのですが、(上のコードで言う)todo.phpへアクセスしてしまうとリダイレクトループが発生するので、自分がアクセスしているページがtodo.phpだった場合にはリダイレクト処理をしないようにしたくて

php

1session_start(); 2if (isset($_SESSION['id'])) { 3 //ログインしてたら 4 if (__FILE__ != 'todo.php') { 5 header('Location: todo.php'); 6 } 7}

という風に書き換えましたが、これでは__FILE__がtodo.phpにならないのでリダイレクトループを回避することができませんでした。

このような場合はどのようにして回避するのが効率的なのでしょうか(todo.phpだけincludeせずに処理を分けることで回避することはできるとは思いますが、そのように解決するしかないのでしょうか?)

わかりにくい質問で申し訳ありませんがよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

php

1if (isset($_SESSION['id'])) { 2 //ログインしてたら 3 if (filter_input(INPUT_SERVER, 'SCRIPT_NAME') != '/todo.php') { 4 header('Location: todo.php'); 5 } 6}

投稿2015/10/06 15:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

uutarou10

2015/10/07 00:14

ありがとうございました。無事に解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問