※追記加えました
laravel5のセッション保存先はsession.phpで変更可能ですが、例えばcookieに設定した場合はデフォルトではlaravel_sessionに保存されます。このcookieではなく新たに作成したcookieにセッションを保存することってできないのでしょうか?例えば
$request->session()->put('key', value); $response->withCookie(cookie('name', 'value', $minutes));
上で作ったセッションを下で作ったcookieに保存するといった感じです。
【追記】
上記の方法は難しいとの指摘を受けたので、最終的にしたいことを書かせていただきます。
簡単に言えば標準で備わっているrember機能を再現したいのです。そんなの標準の機能最初から使えや!という話なのですが、開発環境が微妙に変わった感じなのと自分がバカなので標準のAuthではなく自作のログイン機能を作ることにしました。変わった環境というのはwebサーバーからDBへ行くのではなく、間にAPIを挟んでいることです。
laravelのコントローラー側 public function login_test(Request $request) { $login_id = $request->login_id; $pass = $request->password; $data =array('login_id'=>$login_id,'pass'=>$pass); $data = http_build_query($data, '', '&'); $url = 'urlをここに書いてます'; $header = ['Content-Type: application/x-www-form-urlencoded', 'Content-Length: '.strlen($data)]; $context = [ 'http' => [ 'method' => 'POST', 'header' => implode("\r\n", $header), 'content' => $data, 'ignore_errors' => true ] ]; $context = stream_context_create($context); $result = file_get_contents($url, false, $context); if($result == 1){ $request->session()->put('user', $login_id); return redirect('/'); }else{ return redirect('/login'); } }
APIの認証システム <?php //宣言 $login_id = $_POST['login_id']; $pass = $_POST['pass']; $pass= sha1($pass); //ログイン処理 $dsn='mysql:dbname=test;host=test'; $user='test'; $password='test'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT * FROM kaus_customer WHERE email=? AND password=?'; $data[]=$login_id; $data[]=$pass; $stmt=$dbh->prepare($sql); $stmt->execute($data); $dbh=null; $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec == true) { echo'1'; }else{ echo'0'; } ?>
簡単に言うとAPIの認証側でログインとパスが一致したら1を出力し、laravel側でsessionを発行してトップへリダイレクトするという形にしています。
このままの状態だとセッションはsession.phpで設定されている120分後には切れるんですが、rememberのような機能も追加したいのです。そこで前回セッションタイムアウトを任意でやる方法を質問させていただき解決方法も提示してくださったのですが、どうも動作が不安定なので別の方法を模索することにしました。考えたのは5年巻有効なcookieを新たに作ってそこにセッションを入れるという安直な考えです。しかしそれは難しいそうなので、何か別の考えがあればご助力お願いいたします。セッションタイムアウトが簡単に指定できればそもそもいいんですが・・
回答1件
あなたの回答
tips
プレビュー