前提・実現したいこと
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
あなたの回答
tips
プレビュー