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

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

ただいまの
回答率

90.49%

  • PHP

    20764questions

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

  • HTML

    9239questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    4154questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

自動ログインチェックボックス PHP

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 629

snakeriver

score 56

ログイン画面をストレートなphp(フレームワークなし)で記述しています。
チェックボックスにて自動ログイン機能を追加したいのですが、
記述方法がイマイチわかりません。どうかご教示お願いいたします。
構成は以下になります。
ログイン画面⇨セッションチェック⇨ログイン後画面
login.php ⇨login_check.php⇨page.php

後、自動ログインを無効にする場合はログアウト画面でsessionをdestroyすればいいでしょうか。

login.php ==================

<?php 
ini_set('default_charset', 'UTF-8');
session_start();

//セッションを変数に代入ID、パスワード

    if(isset($_POST["login"])){
        //未入力チェックとかのログインのIDとパスワードの処理

        //認証成功箇所
        //ユーザーIDをセッションに保存
        $autologin = ( $_POST['autologin'] == "1");
        $timeout = 30 * 60;
        //オートログイン
        if($autologin){
            //$autologin = $_POST['autologin'];
            $timeout = 7*24*60*60; //セッションの有効期間を1週間に
            session_set_cookie_params($timeout);
        }
        //session_start();
        //session_regenerate_id(true);

        $_SESSION['gsid'] = $_POST["gsid"];
        $_SESSION['timeout'] = $timeout;
        $_SESSION['expires'] = time() +$timeout;

        $_SESSION['token'] = $_POST['token'];
        $_SESSION['url'] = $url;
        $_SESSION['userid'] =$_POST["gsid"];

        header("HTTP/1.1 301 Moved Permanently");
        header('location: login_check.php');
    }
?>
<html>
<head></head>
<body>
<!--いろいろ記述省略-->
<lable><input type="checkbox" name="autologin" value="1"/>REMEMBER ME / 次回からは自動的にログイン</label>
</body>
</html>

login_check.php ==================

<?php 
ini_set('default_charset', 'UTF-8');
session_start();
$errorMessage = array();
$url = isset($_SESSION['url']) ? $_SESSION['url'] :'';
if (session_id() !== $_SESSION['token']) {
    $errorMessage = "loginerror";
    header("HTTP/1.1 301 Moved Permanently");
    header("location: login_error.php?errorMessage=$errorMessage");
}else{    
        $_SESSION['join'] = $_POST;
        header("HTTP/1.1 301 Moved Permanently");
        header('location:'.$url);
        exit;    
}


page.php =====================

<?php
ini_set('default_charset', 'UTF-8');
session_start();

$errorMessage = array();
$_SESSION['flg']= "OK";

if(session_id() == $_SESSION['token']){
    //セッションIDを新しく生成
    session_regenerate_id();
?>
<html>
<head></head>
<body>
<!--いろいろ記述省略-->
</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • romiogaku

    2016/05/07 13:10

    コードはコードブロック内に記述してください。

    キャンセル

回答 1

checkベストアンサー

+1

自動ログインのためにセッションの時間を延ばすとは考えてもみなかった・・・
セッションハイジャックの可能性が高まるのでやめた方がいいと思います。

実装方法の変更を考えてみてください。
ヒントはcookieです。
あ、でもcookieにidとパスワードをセットするのはダメですよ。

あと、フレームワーク等を使わないで作ることを、フルスクラッチと言います。
http://e-words.jp/w/フルスクラッチ.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    TCPDF 日本語のファイル名で保存

    // ...省略 $name = '名無し'; $filename = 'ご請求書-' . $name . '様'; $pdf->Output($filename .'.pdf'

  • 解決済

    ファイルダウンロードについて

    質問 PHPで、Submitボタンを押下すると、 テキストボックスに入力した値を処理して、処理結果をテキストファイルに出力するプログラムを作成しています。 このときSubmi

  • 解決済

    会員制サイト:メールアドレスでログイン

    前提・実現したいこと Qiita:PHPとMySQLで新規登録とログインを実装する(PDO使用)を参考に、PHPで会員制サイトを作っています。 このサイトで作れるものでは、ID

  • 解決済

    簡単なログイン機能[初心者]

    前提・実現したいこと PHPで簡易ログイン機能を作りたいです。 login.htmlでidとpassを入力して、ボタンを押したら session1.phpに情報を送信して処理

  • 解決済

    PHP文字の代入

    したいこと ログインしてるかしてないかで、表示させる文字列を変える。 コード <?php session_start(); // ログイン状態チェック if (!iss

  • 解決済

    ヒアドキュメント

    PHPでサイトの作成での勉強で、ログインのモーダルウインドウを表示するようにしたんですが、全ページにつけるとなると結構たいへんで、後にデザイン変更する時も大変になるのでと思い。管理

  • 解決済

    別ブラウザでセッションが保存されていない状態でプログラムを動かしたい

    前提・実現したいこと XAMPPとMySQLを使ってログイン画面を作っています。 ログイン後、別ブラウザでログイン完了後の画面を開くと「ログインされていません」の表示が出るよう

  • 解決済

    ログインフォームがウンともスンとも言いません。

    汚いソースですみません。 ネットで調べながらmysqliを使って、ログインフォームを作っています。 ログインフォームの入力項目はusernameとpasswordのみです。

同じタグがついた質問を見る

  • PHP

    20764questions

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

  • HTML

    9239questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    4154questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。