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

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

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

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

Q&A

解決済

1回答

370閲覧

ログイン判定 クラス化について

Company_

総合スコア16

PHP

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

0グッド

0クリップ

投稿2018/10/10 02:31

編集2018/10/10 05:12

前提・実現したいこと

ログイン判定をクラス化しようと思っております
オブジェクト指向に関しては勉強したてのため、深く理解していない状況です

発生している問題・エラーメッセージ

実際にクラスを作成してみたのですが"ログインされていません"が表示され、ログインできない状況です コンストラクタにセッション変数の中身が渡せていないのでしょうか

該当のソースコード

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();

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

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

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

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

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

m.ts10806

2018/10/10 02:44

$loginに何が設定されていますか?
m.ts10806

2018/10/10 02:45

そもそも$_SESSION["NAME"]はどのように設定されるのでしょうか。
mather

2018/10/10 02:50

$sessionがプロパティとコンストラクタの引数で同じ変数名なのが気になります。別の名前にしてみてはどうでしょうか?
Company_

2018/10/10 02:52

$loginに関してはprivate $login;と定義しなければならないということでしょうか
mather

2018/10/10 02:53

if (isset($_SESSION["NAME"])) ではなく if (empty($_SESSION["NAME"])) にしても動作しますか?
Company_

2018/10/10 02:54

$_SESSION["NAME"]に関しては、どのように受け渡せばいいのか分かっていない状況です
m.ts10806

2018/10/10 02:54

ひとまず引数で受け取ってる変数名をかえてみては
m.ts10806

2018/10/10 02:56

受け渡すのではなく、値が設定されている場所の話です。今のコードだけだと定義されずに いきなり使われてます。というか$_SESSIONはスーパーグローバル変数なので正しく定義されてればどこからでも参照できるので引数で渡さなくても使えます。
Company_

2018/10/10 03:01

変数名を変更してきました public function __construct($test)
Company_

2018/10/10 03:02

if (empty($_SESSION["NAME"]))で試したところログインできました
mather

2018/10/10 03:09

コードを変更した場合、質問を更新しましょう。また変更したあとの実行結果はどうなりましたか?
Company_

2018/10/10 03:12

質問を更新しました 変数名を変更しても実行結果は変わりませんでした
Company_

2018/10/10 03:13

セッション変数を引数で渡さずにやってみましたが変わりませんでした
m.ts10806

2018/10/10 04:55

code機能は何個でも関係なく利用できるので変更後のコードも同じようにコードブロックにしてください
m.ts10806

2018/10/10 04:58

結局$_SESSION['name']はどこでどのように定義(情報が保管)されているのでしょうか?
Company_

2018/10/10 05:11

ログイン成功時に、ログイン機能の方でセッション変数に情報が保管されるようにしております
mather

2018/10/10 05:29

session_start() を毎回実行しているのも気になります。削除してみてはどうでしょうか。
Company_

2018/10/10 05:47

承知しました セッションについて、今一度勉強し直してみます
guest

回答1

0

自己解決

解決しました

そもそもセッション変数に値を渡せていませんでした

原因としましてはログイン画面で"ログインされていません"のセッション変数を消すために
$_SESSION = array();とsession_destroy();を記述していました

これから使用するセッション変数もクリアしてしまうことを知りませんでした

何とか無事にクラスを使用しログインできました

ご回答下さり有り難う御座いました

投稿2018/10/10 05:36

編集2018/10/11 00:49
Company_

総合スコア16

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

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

m.ts10806

2018/10/10 06:37

個人的に気になったのですが、ご自身で組まれたコードではないのですか? 複数人で分担してるとか
Company_

2018/10/10 06:50

私自身で作成したコードになります クラスに関しては複数人で共有するために作成しました
m.ts10806

2018/10/10 06:52

なるほど。 クラスにするにあたりまだちょっと連携が甘いところがあったというところですね。わかりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問