[0029]同ドメインのサブドメイン違い内でCookieの利用 Lalavelをやめ、javascriptへ
■construct
Cookieの仕様変更により、今まで動いていたものが動かくなりました。
同ドメインだが、サブドメイン違いで、www.XXXX.jpでCookieを保持し、mkt.XXXX.jpでCookieを利用したい!を実現するため、
Lalavelのconfig/session.phpのdomainやsecureを修正してみましたが、実現できず。。。jpは厳しいという記事もあり。。
Lalavelの\Cookie::queueをやめ、javascriptで作り変えました。javascriptだとやりたいことが実現できたのでメモ。
\Cookie::queueをコメントし、View(ビュー)にCookieで保持したい値をportal_nameの名前で渡します。
XXXController.php
if ($portal) {
//クッキーを保持したい条件
//\Cookie::queue('portal_nm',time(),43200);
$portal_name = $portal;
}
return view('tour.xxxx.xxxx.show')->with(['portal_name'=>$portal_name]);
View(ビュー)でCookieで保持したい値(この例では$portal_name)を受け取りdomainを指定しjavascriptでCookieを保持します。
カンマ区切りで文字列を保持していくので以下構造になっています。
tour.xxxx.xxxx.show.blade.php
<script>
var portal_name = "<?php echo @$portal_name;?>";
window.addEventListener('DOMContentLoaded', function () {
if(portal_name != ""){
his_c = ($.cookie("portal_nm"))?$.cookie("portal_nm").split(","):[];
if(his_c.length){
if(his_c.indexOf(portal_name) === -1){
his_c.push(portal_name);
document.cookie = "portal_nm="+his_c+"; path=/; domain=XXXX.jp; max-age=43200; secure; samesite=none;";
}
}else{
his_c.push(portal_name);
document.cookie = "portal_nm="+his_c+"; path=/; domain=XXXX.jp; max-age=43200; secure; samesite=none;";
}
}
});
</script>
Cookieを利用したい場所でController(コントローラ)に渡したいので、View(ビュー)で呼出しHiddenにセットします。
tour.xxxx.xxxx.index.blade.php
<script src="https://i.travelwith.jp/js/jquery.cookie.js">
<script>
window.addEventListener('DOMContentLoaded', function () {
//wwwのshowから引き継いだcookieを渡すためHiddenにセット
$('#portal_nm').val($.cookie("portal_nm"));
});
</script>
{!! Form::hidden('portal_nm','',['id'=>'portal_nm']) !!}
これで無事Controller(コントローラ)でCookieを受け取れました!
XXXXController.php
/*if (\Cookie::get('portal_nm')) {
$cookie_datas = \Cookie::get('portal_nm');
}*/
$cookie_datas = @$all_req['portal_nm'];