■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

ログイン画面を作成し、セッション管理を行うにはどうすればよいでしょうか?

satokicx > ログイン画面を作成し、セッション管理を行うにはどうすればよいでしょうか? @ 2014/7/7 10:00
いつも拝見させていただいております。

CMS DESINのテンプレートを用いて、コンテンツ作成をテストしております。

■ BaserCMSのバージョン:baserCMS 3.0.2
■ レンタルサーバー名:ローカルXAMPP 1.7.4
■ スマートURLの利用: OFF
■ 設置フォルダ: サブフォルダ
■ 利用しているデータベース: MySQL
■ PHPスキル(自己評価): [ D]

CMS DESINのトップ画面の前に、別にログイン画面を作成し、ID、パスワードで
ログイン制御をしたいと思っております。
(ログイン画面からのみCMS DESINのトップ画面に遷移できないようにしたい)

/htdocs/インストールフォルダ/に、下記チェック用のページを作成しました。

//セッションの生成
session_start();

//ユーザー名/パスワード
$companyCd = htmlspecialchars($_POST['companyCd'], ENT_QUOTES);
$stuffCd = htmlspecialchars($_POST['stuffCd'], ENT_QUOTES);

//データベースに接続
require_once ("config.inc.php");//ログイン情報を定数で一度だけ外部文章を呼び出し
try{
$pdo = new PDO(DSN,DBUSER,DBPASS, array(PDO::ATTR_EMULATE_PREPARES =>false));//array以降は定形文としておく
$pdo->query('SET NAMES utf8');//文字列セット
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//定形文

//ユーザー名とパスワードのチェック
$stmt = $pdo->prepare('SELECT companyCd,stuffCd,authorityCd
FROM tbm_user
WHERE companyCd = :companyCd AND stuffCd = :stuffCd');

$stmt->bindValue(':companyCd', $companyCd);
$stmt->bindValue(':stuffCd', $stuffCd);
$stmt->execute();

//合致するデータがあるか
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$count = count(($row["stuffCd"]));
//表示用会社CDをセッション変数に保存
$_SESSION['companyCd'] = $row['companyCd'];
//表示用スタッフCDをセッション変数に保存
$_SESSION['stuffCd'] = $row['stuffCd'];
//権限CDをセッション変数に保存
$_SESSION['authorityCd'] = $row['authorityCd'];

}
//認証

if($count != 1 ){//合致するデータがない
//ログイン失敗
$login = 'Error';
//ログイン失敗:ログインフォームへ
header('location: index.html');
}
elseif($count == 1){//合致するデータがある
//ログイン成功
$login = 'OK';
//セッション変数に記録
$_SESSION['login'] = $login;
//ログイン成功:TOPページへ
header('location: /インストールフォルダ/basercms/index.php');
}
elseif($count == 1 and $row['authorityCd'] ==1 ){//合致するデータがあり、管理者である
//ログイン成功
$login = 'OK';
//セッション変数に記録
$_SESSION['login'] = $login;
//ログイン成功:adminページへ
header('location: /インストールフォルダ/basercms/index_m.php');
}
else{
//ログイン失敗
$login = 'Error';
//ログイン失敗:ログインフォームへ
header('location: index.html');
}
} catch (PDOException $e){
echo 'Error: ' . $e->getMessage();
//exit('error');//$eはエラーメッセージ保存用
//die();
}

$pdo = null;

?>
同じく、
\htdocs\インストールフォルダ\basercms\app\webroot
にあるindex.phpの先頭に下記コードを追加しました。

//セッションの復元
session_start();

//ログインチェック
if ($_SESSION['login'] !== 'OK'){
//ログインフォームへ
header('Location: index.html');
//終了
exit();
}

結果、作成した画面からのみ遷移できるところまでは確認できたのですが、
管理画面にもログインできなくなってしまいました。

管理画面にはセッション関係なくログインしたいのですが、
http://localhost/インストールフォルダ/basercms/index.php/admin/dashdoard
というページはどこに存在するのでしょうか?

上記のようなセッション管理を行われている方がいらっしゃいましたら、
情報いただけると幸いです。

以上よろしくお願いいたします。
goichi > Re: ログイン画面を作成し、セッション管理を行うにはどうすればよいでしょうか? @ 2014/7/7 11:42
こんにちは。
煩雑になるので、細かくコードを示すところまではしませんが、baserCMSにはプレフィックス認証という機能があるので、使ってみると良いかも知れません。ちょっとバージョンが違いますが、他の方が試した記事などがあります。(他にもGoogleなどで検索すると出てくると思います)

それと、そもそもCakePHPの上に乗っかって動いているCMSなので、CakePHPの機能を使って貰えれば、色々なことがスッキリすると思います(いまフレームワークのことを、無視して作ろうとされていると思います。何か特別な理由があるかも知れませんが、そうでないなら、かえって複雑になるかもしれません)。

また、単純にページの表示にロックをかけたいということなら、Basic認証で済ますのも手かな、と思います。
htaccess等をいじります。こちらも検索すれば出てきますので、お試し下さい。
satokicx > Re: ログイン画面を作成し、セッション管理を行うにはどうすればよいでしょうか? @ 2014/7/7 18:22
goichi様

早速のご回答ありがとうございました。
頂戴したログを確認致します。

ありがとうございました。
ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
29 人のユーザが現在オンラインです。 (27 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 29