会員ログイン情報を記憶時の長さ変更について
-
投稿者投稿
-
2016年2月1日 11:48 AM #77155xd参加者
会員ログイン画面でログイン情報を記憶した場合、その長さを変えたいと考えています。
該当箇所がclasses/uscshop.class.php内のfunction set_cookie($values){
$value = serialize($values);
$timeout = time()+7*86400;
$domain = $_SERVER[‘SERVER_NAME’];
$res = setcookie(‘usces_cookie’, $value, $timeout, USCES_COOKIEPATH, $domain);
}のようなのですが、見ると1週間有効のようでした。
これを変えるにはフィルタなどがあるのでしょうか?2016年2月1日 3:48 PM #77181nanbuキーマスターこんにちは
time()とやっていますが、サーバーのtimeで良いの鼓動かも微妙なので、フィルタで対応できるように修正しようと思います。次期バージョンにて、下記の様に修正いたします。
function set_cookie($values, $key='usces_cookie'){ $value = serialize($values); $timeout = time()+7*86400; $timeout = apply_filters( 'usces_filter_set_cookie_timeout', $timeout, $values, $key); $domain = $_SERVER['SERVER_NAME']; $res = setcookie($key, $value, $timeout, USCES_COOKIEPATH, $domain); }
2016年2月1日 4:52 PM #77183xd参加者対応有難うございます。
ところで、Cookieの有効期限なのですが、マイページログイン時に情報を記憶しているのですが、ブラウザを閉じて、もう一度開くとログアウトしています。
Cookieに有効期限を設けない場合はクッキーの有効期限がブラウザを閉じるまでだと思うのですが、コード的に有効期限が指定されているにも係わらず、ブラウザを閉じるとCookieがなくなっているのはなにが原因なのでしょうか。
——————————————-
WordPress のバージョン:4.4.1
Welcart のバージョン:1.6.6.1512212
ご利用のテーマ:オリジナル
症状を確認したブラウザ:Chrome,Firefox
サーバー(会社名、サービス名):wpx
SSLの利用: なし
WordPress のパーマリンク設定:カスタム /%category%/%post_id%/
——————————————–試しにfunctions.phpに以下のコードを追加して調べてみました。
add_filter( 'usces_filter_member_login', 'WELCART_MEMBER_LOGIN' , 1 ); function WELCART_MEMBER_LOGIN( $member ) { //Cookieを取得する $values = isset($_COOKIE['usces_cookie']) ? unserialize(stripslashes($_COOKIE['usces_cookie'])) : NULL; $values['test'] = date( 'Y-m-d H:i:s' , time() ); //中身をシリアライズする $value = serialize( $values ); //1年間有効 $timeout = time() + 365 * 86400; $domain = $_SERVER[ 'SERVER_NAME' ]; //クッキーをセットする $res = setcookie( 'usces_cookie' , $value, $timeout , USCES_COOKIEPATH , $domain ); var_dump($values); return $member; }
Cookieの有効期限を一年間にし、「test」というキーを独自に追加して現在の時刻をCookieに加えました。
ログイン後に$_COOKIE[‘usces_cookie’]でCookieの中身を調べると現在時刻が追加されています。その後、「test」というキーの行はコメントアウトして、Cookieの現在時刻が更新されないようにしました。
一回ブラウザを閉じてログイン情報が記憶されている前提で、マイページやログイン条件判定を試すと、ログインしていないことになります。
再度ログインページを開いてログインすると独自に追加した「test」というキーとさきほどの現在時刻は変わっていません。Cookieには有効期限が設定されているようです。
そこで推測されるのが、セッションが切れるとログイン情報も一緒になくなるのではないか? ということです。
カートの中身はブラウザを閉じてなくなってもいいのですが、ログイン状態については維持したいと考えています。
アドバイスお願いします。2016年2月2日 11:05 AM #77196nanbuキーマスターこちらでは、Chromeでの検証ですが、ブラウザを閉じてもログイン情報を保存されており、問題なく動作いたしております。
2016年2月3日 7:27 AM #77201xd参加者回答有り難うございます。
本来であればブラウザを閉じてもログイン情報が保存されているということですね。
iPhone6のChromeでも同じ現象となってしまいます。それでは質問を変えさせていただきます。
ログイン情報が保存されないとしたら、どんな原因が考えられるのでしょうか?私の誤解もあるかもしれないので、期待しているフローについて書きます。
1.ショップ会員ページにアクセス
2.ログイン画面でメールアドレスとパスワードを入力
3.ログイン情報を記憶にチェックを入れログイン
4.会員のマイページが表示される
5.ブラウザを閉じる
6.再びショップ会員ページにアクセス
7.ログインせずに会員のマイページが表示されるという流れを期待しています。
しかし、実際には、7番ではなく2番となってしまいます。ログイン情報を記憶にチェックを入れても、必ず2番の画面が表示されるけれど、ログイン状態は維持されているのでしょうか?
一応ログイン状態を判定する関数で調べてみても、ログインはしていないことになっています。
しかし、Cookieは保存されています。なのでセッションが切れると同時に、「ログイン情報を記憶」が保存されているCookieを読みに行かず、ログアウトとみなされているのかなと推測しています。
アドバイスよろしくお願いします。2016年2月6日 1:48 PM #77241nanbuキーマスターすみません、「ログイン情報を保存している」という言葉に語弊があったかもしれません。ログイン情報を記憶した場合は、ログイン状態を保持するのではなく、次回はログインする事無くマイページにアクセスできるというのが正しい言い方になります。
ログイン状態を保持している訳ではありませんので、ブラウザを閉じると、次にトップページにアクセスしてもログイン状態ではありません。ただ、このまま会員ページのURLに行きますと、ログインする事無くマイページが見れるはずです。
従いまして、cookieには残っているが、セッションは切れているというのは正常な動作です。マイページもしくはログインページにアクセスすることでログイン状態となります。
なお、ログインウィジェットで、「記憶」にチェックを入れないでログインすると、ログイン情報はクリアされます。
2016年2月6日 3:07 PM #77252xd参加者お忙しい中返答ありがとうございました。
> ブラウザを閉じると、次にトップページにアクセスしてもログイン状態ではありません。
ということですので仕様ということで理解しました。
としますと、ブラウザを閉じた後はログイン状態ではないため、ログイン状態を判定するとやはりログインしていないということになり、ログインユーザーの分岐は出来ないということですね。当ショップでは、ログインユーザーだけのサービスを実施しているのですが、一度ログインしないといけないため、結構離脱率が多くて困っています。
ブラウザを閉じた後もユーザー側には無手順でログインユーザーと認識させたいと考えています。なにか用意されているフィルタなどを使って、できそうでしょうか?
とりあえず、今思いついたのは、ログイン情報のCookieは残っているので、ログイン状態の判定はwelcartの関数ではなくCookieで行うというものです。
いかがでしょうか?2016年2月15日 10:06 AM #77395nanbuキーマスターusc-e-shop/classes/usceshop.class.php に、member_login()という関数が有ります。こちらを見ていただけたら、どの様にすれば良いかヒントが有るかと思います。
2016年2月17日 1:45 PM #77434xd参加者member_login() を見ましたがやはりセッションと連動しているためブラウザを閉じるとダメなようです。
継続的にログインしていることを判定するにはCookieを使うことで解決しました。
コード置いておきます。//Welcartの会員ページログイン時間を変更する///////////////////////////////////// add_filter( 'usces_filter_member_login', 'WELCART_MEMBER_LOGIN' , 1 ); function WELCART_MEMBER_LOGIN( $member ) { //Cookieを取得する $values = isset($_COOKIE['usces_cookie']) ? unserialize(stripslashes($_COOKIE['usces_cookie'])) : NULL; //中身をシリアライズする $value = serialize( $values ); //1年間有効 $timeout = time() + 365 * 86400; $domain = $_SERVER[ 'SERVER_NAME' ]; //クッキーをセットする $res = setcookie( 'usces_cookie' , $value, $timeout , USCES_COOKIEPATH , $domain ); return $member; } //Welcartを会員制にする//////////////////////////////////////////////////////// add_filter( 'usces_filter_single_item_inform' , 'SHOP_IS_MEMBERS_ONLY' , 1 ); function SHOP_IS_MEMBERS_ONLY( $html ) { //Cookieを取得する $values = isset($_COOKIE['usces_cookie']) ? unserialize(stripslashes($_COOKIE['usces_cookie'])) : NULL; global $post , $usces; //価格のパターンをセット $pat = '{(<div\s?class\s?=\s?"field_price">)(.*?)(<\/div>)}i'; //フォームのパターンをセット $pat2 = '{(<input\s?name\s?=\s?"inCart)}i'; //会員としてログインしていなければ if(! usces_is_login() or $values[ 'rme' ] != 'forever' ) { $html = preg_replace( $pat , '<div class="member-attention"><a href="' . USCES_MEMBER_URL . '" target="_blank">ログイン</a>していないため価格が表示されません</div>' , $html ); $html = preg_replace( $pat2 , '<div class="member-attention"><a href="' . USCES_MEMBER_URL . '" target="_blank">ログイン</a>していないためカートへ入れることができません</div>$1' , $html ); $html .= '<style>.field_price , .field_cprice , .itemGpExp , .skubutton{ display: none; }</style>'; } return $html; }
2016年2月17日 8:46 PM #77435xd参加者あっ訂正です。
以下はorではなくandでした。//会員としてログインしていなければ if(! usces_is_login() and $values[ 'rme' ] != 'forever' )
-
投稿者投稿
- このトピックに返信するにはログインが必要です。