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

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

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

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

0回答

318閲覧

ブラウザを閉じてもログインが継続するようにしたい。

Dongrill

総合スコア19

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

1クリップ

投稿2018/09/05 10:46

編集2018/09/06 09:21

前提・実現したいこと

cookieの有効期限を設定して、ブラウザを閉じてもログインが継続するようにしたい。
またサーバー側のセッション期間はsession.gc_maxlifetime にて864000に設定しております。
よろしくお願いします。

---追記---
session_start()にて自動生成されるcookieであるPHPSESSIDの期限はデフォルトの1969-12-31でしたが、
setcookieで作成したcookieであるnameの期限は2018-10-06でした。
そのためsetcookie自体は正しく機能していたようです。
しかしそのSetcookieで生成したcookieがログイン時に使用されていないので自動ログインができてないようです。

該当のソースコード

php

1---index.php--- 2<?php 3setcookie("name", "value", time()+60*60*24*30); 4session_start(); 5 6echo('<pre>'); 7var_dump($_COOKIE['name']); 8echo('</pre>'); 9?> 10<!doctype html> 11<html> 12<head> 13</head> 14 15<body class="clearfix"> 16 17<div class="login"><a href="html/login_top.php">ログイン</a></div> 18<div class="sign-up"><a href="html/signup_top.php">新規登録</a></div> 19 20<footer> 21</footer> 22 23</body> 24</html>

php

1---login_top.php--- 2<?php 3setcookie("name", "value", time()+60*60*24*30); 4session_start(); 5?> 6<?php 7$pdo=new PDO('', '', ''); 8date_default_timezone_set('Asia/Tokyo'); 9 10 11unset($_SESSION['users']); 12$sql=$pdo->prepare('select * from users where username=? and password=?'); 13$sql->execute([$_REQUEST['username'], $_REQUEST['password']]); 14foreach ($sql as $row) { 15 16 $sql=$pdo->prepare('update users set update_date=? where user_id=?'); 17 $sql->execute([date("Y/m/d H:i:s"), $row["user_id"]]); 18 19 $_SESSION['users']=[ 20 'user_id'=>$row['user_id'], 'username'=>$row['username'], 'email'=>$row['email'], 'password'=>$row['password']]; 21} 22if (isset($_SESSION['users'])) { 23 24 $sql=$pdo->prepare('update users set update_date=? where user_id=?'); 25 $sql->execute([date("Y/m/d H:i:s"), $row["user_id"]]); 26 27 $_SESSION['users']=[ 28 'user_id'=>$row['user_id'], 'username'=>$_REQUEST['username'], 'email'=>$_REQUEST['email'], 'password'=>$row['password']]; 29 header("Location: ../index.php"); 30 exit(); 31} else { 32 header("Location: login_top.php"); 33 exit(); 34} 35?> 36

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

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

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

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

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

y_waiwai

2018/09/05 10:48

それで実際はどうなってるんでしょうか。
Dongrill

2018/09/05 10:52

すみません。 現状はcookie自体は保存できているようなのですが、ブラウザを閉じた際や一定時間経過で自動的に消えてしまうようです。
m.ts10806

2018/09/05 11:34

どこで消えているかを判断されているのでしょうか。コードを追記してください。
退会済みユーザー

退会済みユーザー

2018/09/06 01:14

質問タグphpMyAdminって関係なくね?
Dongrill

2018/09/06 04:33

ご質問ありがとうございます。 ご返信遅くなってしまい大変申し訳ございません。 mts10806様 情報が足りないとのことですが、具体的にどのあたりを追記すべきでしょうか? 全てとなると700行以上となってしまいますので逆にご迷惑かと思いまして。 何卒宜しくお願いします。
m.ts10806

2018/09/06 04:37

全体の流れとご自身で「Cookieが消えた」と判断された箇所がわかるように追記してください。コードだけじゃなく確認方法もお願いします
退会済みユーザー

退会済みユーザー

2018/09/06 06:16

再現性のある部分だけに絞ってサンプルコードを書くところまでやるのが質問者の領分ですよ?
Dongrill

2018/09/06 06:25

ありがとうございます。Cookieが消えたの件ですが間違っておりました。Cookieは消えておらず例えばログインしたあとブラウザを閉じたあと再度ページを開いた際もCookieは消えておりませんでした。それはvar_dumpやchromeのデベロッパーツールからも確認済みです。そのためCookieが消えるのではなく適用されないのが問題なのではないかと考えているのですが、なかなか調べても答えが出てきませんでした。またコードの追記ですができる限り再現性があるようにいたします。何卒宜しくお願いします。
Dongrill

2018/09/06 06:40

追記いたしました。やはりCookie[value]自体は消えておりませんので検出可能でした。
tonkun4os

2018/09/10 04:20

cookieとSESSIONを調べてた方が・・・(cookieは有効でもSESSIONが破棄されている事がありますから・・・)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問