前提・実現したいこと
ログイン判定をクラス化しようと思っております
オブジェクト指向に関しては勉強したてのため、深く理解していない状況です
発生している問題・エラーメッセージ
実際にクラスを作成してみたのですが"ログインされていません"が表示され、ログインできない状況です コンストラクタにセッション変数の中身が渡せていないのでしょうか
該当のソースコード
php
1<?php 2 3class Login_Authentication 4{ 5 private $session; 6 7 public function __construct($session) 8{ 9 $this->session = $session; 10 $login = $this->session; 11 12 if (empty($login)) { 13 $_SESSION["FAILURE"] = "ログインされていません"; 14 header("Location: ログイン画面のURL"); 15 exit(); 16 } 17 } 18} 19 20 session_start(); 21 session_regenerate_id(true); 22 23 $Authentication = new Login_Authentication($_SESSION["NAME"]); 24 25
試したこと
クラスを使用せずに
if (isset($_SESSION["NAME"]))
{
を試してみたところログインできました
###変更後
<?php class Login_Authentication { private $session; public function __construct() { session_start(); session_regenerate_id(true); $this->session = $_SESSION["NAME"] $login = $this->session; if (empty($login)) { $_SESSION["FAILURE"] = "ログインされていません"; header("Location: ログイン画面のURL"); exit(); } } } $Authentication = new Login_Authentication();
$loginに何が設定されていますか?
そもそも$_SESSION["NAME"]はどのように設定されるのでしょうか。
$sessionがプロパティとコンストラクタの引数で同じ変数名なのが気になります。別の名前にしてみてはどうでしょうか?
$loginに関してはprivate $login;と定義しなければならないということでしょうか
if (isset($_SESSION["NAME"])) ではなく if (empty($_SESSION["NAME"])) にしても動作しますか?
$_SESSION["NAME"]に関しては、どのように受け渡せばいいのか分かっていない状況です
ひとまず引数で受け取ってる変数名をかえてみては
受け渡すのではなく、値が設定されている場所の話です。今のコードだけだと定義されずに いきなり使われてます。というか$_SESSIONはスーパーグローバル変数なので正しく定義されてればどこからでも参照できるので引数で渡さなくても使えます。
変数名を変更してきました public function __construct($test)
if (empty($_SESSION["NAME"]))で試したところログインできました
コードを変更した場合、質問を更新しましょう。また変更したあとの実行結果はどうなりましたか?
質問を更新しました 変数名を変更しても実行結果は変わりませんでした
セッション変数を引数で渡さずにやってみましたが変わりませんでした
code機能は何個でも関係なく利用できるので変更後のコードも同じようにコードブロックにしてください
結局$_SESSION['name']はどこでどのように定義(情報が保管)されているのでしょうか?
ログイン成功時に、ログイン機能の方でセッション変数に情報が保管されるようにしております
session_start() を毎回実行しているのも気になります。削除してみてはどうでしょうか。
承知しました セッションについて、今一度勉強し直してみます
回答1件
あなたの回答
tips
プレビュー