Back to Question Center
0

کوکی Semalle در حال حرکت تحت SSL کاهش یافته است

1 answers:

نسخه کوتاه:

من کوکی جلسه ای را در یک سایت Dev قرار داده ام اما وقتی که من به SSL می روم برداشته نمی شود (بنابراین سبد خرید برای شما خالی می شود).

هنگامی که آن را در www سایت تنظیم شده:

     # http: // dev. دامنه - kanger subtank nano tank of the month. بیرون
نام devSID
ارزش 2e9f1b1f6ca718d0961d0257f3297c1a
میزبان. دامنه. بیرون
مسیر/
امن شماره
در انتهای جلسه پایان مییابد    

و در طرف ssl :

     # https: // dev. دامنه. بیرون
نام devSID
ارزش 6fe74ccc91b67bce46165d005bfd157e
میزبان. دامنه. بیرون
مسیر/
امن شماره
در انتهای جلسه پایان مییابد    

به نظر می رسد کوکی جلسه ایجاد شده در زیر www در زیر ssl برداشته نمی شود (برعکس آن هم به هیچ وجه نمی رود، اگر بر روی آن ایجاد شده باشد طرف ssl آن را در سمت www سمت چپ نگرفته است.

Semalt هر گونه ایده های روشن بود؟


نسخه طولانی (من از طریق آن کار می کنم)

من یک سایت dev در حال حاضر در زیر دامنه dev داشته ام؛ تنظیم کوکی جلسه در کل دامنه با استفاده از یک . دامنه. فرمت نوع ext و با استفاده از شیء PHP ایجاد می شود که پارامترها را از یک جدول پیکربندی در پایگاه داده بارگیری می کند.

همان جسم، کوکی را در تمام زیر دامنه ها ایجاد می کند، بنابراین کوکی های تکراری با مقادیر مختلف مسیر یا هر چیز دیگری مانند آن ایجاد نمی کند.

     نام devSID
مقدار [مقدار هش عددی عددی]
میزبان. دامنه. بیرون
مسیر/
امن شماره
در انتهای جلسه پایان مییابد    

در دستگاه محلی من، دامنه های زیر استفاده می شود www و ssl ، بنابراین رشته میزبان به عنوان . dev. محلی و کوکی به راحتی در کل دامنه (با استفاده از https-vhosts آپاچی) خوانده می شود. conf به تنظیمات دامنه ها بر روی سرور و فایل میزبان ویندوز اشاره می کند تا 127. 0. 0. 1) و همه چیز هلو است.

با این حال، هنگامی که من آن را به یک سرور آنلاین dev (با تنظیمات خود تنظیمات و تنظیمات خود) آپلود می کنم، کوکی زمانی که از سمت www به ssl و من نمیتوانم دلیل منطقی برای آن ببینم.

این چیزی است که در حال حرکت است:

     ServerName www. dev. دامنه. بیرونServerAlias ​​www. dev. دامنه. ext dev. دامنه. بیرون [بیت SSL موتور]ServerName ssl. dev. دامنه. بیرونServerAlias ​​ssl. dev. دامنه. ext dev. دامنه. بیرون     

از نظر فنی دامنه های زیر (به عنوان توسط ServerName تعریف شده) www. dev و ssl. dev با این حال هیچ کدام از آنها در واقع هیچ یک از سرورهای DNS ثبت نشده اند - سرور DNS فقط دارای دامنه dev زیر دامنه ثبت شده است؛ بنابراین من اضافه کردم که در لیست ServerAlias ​​و نوشته ها در فایل های میزبان ویندوز من ساخته شده است، بنابراین دامنه های ثبت نشده ثبت نشده در دستگاه من حل و فصل.

     [آدرس آی پی] www. dev. دامنه. بیرون
[IP ADDRESS] ssl. dev. دامنه. بیرون    

و پارامترهای پارامتر کوکی:

     نام devSID
مقدار [مقدار هش عددی عددی]
میزبان. دامنه. بیرون
مسیر/
امن شماره
در انتهای جلسه پایان مییابد    

بنابراین، از لحاظ نظری، که کوکی باید در سراسر همه زیر دامنه (حتی سایت زنده در واقع از آنجایی که من آن را به زیر دامنه dev محدود نیست) اما هر زمان که به سمت SSL حرکت می کنم، کوکی کاهش می یابد.

February 13, 2018

OK - من فکر می کنم من آن را حل کرد، به لطف دیو و امیل؛ در حالی که شما ناخن بر روی سر نیافتید - شما انجام دادید من را در مکان مناسب انتخاب کنید (و مرا به یاد Fiddler برای اشکالزدایی).

از لحاظ نظری، آنچه که من انجام می دادم نباید کوکی را خراب کرد اما آن را داشت، اما فقط گاهی اوقات (e. g. آن را خوب از دسترسی به سرور dev آنلاین از خانه، اما نه از دفتر کار)

در اصل، کنترل کوکی جلسه پی اچ پی session_set_cookie_params

تاریخ خرابی غیر صفر را به نحوی که دوست داشتم انجام نمی دهد؛ اگر جلسه را به مدت 15 دقیقه منقضی کنید، زمان

+ 900 آن را در 15 دقیقه از زمانی که کوکی تنظیم شده است، منقضی می شوید نه زمان منقضی را به روز رسانی کنید. بنابراین آنچه که من انجام دادم، در داخل سازنده خصوصی شیء جلسه (آن یک Singleton) بود:

  اگر ($ this-> cookie_lifetime! = 0) {اگر (is_null ($ bUseHTTPCookie)) {setcookie ($ this-> getName 

، $ this-> getID

، (time

+ $ this-> cookie_lifetime)، $ this-> cookie_path، $ this-> cookie_domain ، $ this-> use_ssl_cookie_only)؛ }دیگر {setcookie ($ this-> getName

، $ this-> getID

، (time

+ $ this-> cookie_lifetime)، $ this-> cookie_path، $ this-> cookie_domain، $ this-> use_ssl_cookie_only $ this-> use_http_cookie_only)؛ } }

کدام است که کوکی جلسه را بهروزرسانی کند تا 15 دقیقه زمان لازم برای تمدید صفحه را افزایش دهد؛ و آن را به خوبی در محلی کار می کرد و دسترسی به سرور dev از خانه اما کار نمی کرد از دستگاه من در محل کار (ممکن است یک بار در حدود 50 کار).

من معتقد هستم که یک مسئله تاخیر است؛ session_set_cookie_params

به طور واقعی برای نوشتن کوکی ممکن است به اندازه کافی طولانی باشد که اسکریپت برای قرار دادن setcookie

قرار گیرد برای به روز رسانی آن کوکی و اتفاقات بد رخ داد.

در Fiddler متوجه شدم که زمانی که یک صفحه زمان زیادی را برای بارگیری کوکی جلسه تنظیم کرد (که به این معنی است که setcookie

قبل از جلسه اجرا شد شناسه در محل قرار گرفت و بنابراین یک رشته خالی را به عنوان مقدار کوکی تنظیم کرد که البته، کوکی را حذف خواهد کرد.

حالا از setcookie

تابع (ها) اظهار نظر کرده ام به نظر می رسد از دفتر کار می کند!

بله، نیازی به گفتن نیست، من یک احمق هستم - متشکرم :)

من مظنون هستم که این موضوع مربوط به دامنه کوکی است. سعی کنید یک اسکریپت با یک تماس به تابع phpinfo

ایجاد کنید و مقدار جلسه را بررسی کنید. مقدار cookie_domain در هر دو www و ssl vhosts؟

شما به دنبال فرض اشتباه هستید. هنگام تغییر از http به https، آن را به عنوان یک دامنه جدید، سرور جدید، همه چیز جدید، و بنابراین کوکی ها را نمی توان بین ssl و اتصال غیر ssl حفظ، با وجود آنها در همان سرور، دامنه همان.

یک راه حل برای این تغییر با استفاده از یک رشته پرس و جو تغییر مسیر است. به عنوان مثال:

شما در http: / www. دامنه. و جلسه کوکی مربوط به جلسه PHPSESSID = 123

در لینک برای تغییر سرور شما باید یک رشته پرس و جو مانند https: // امن اضافه کنید. دامنه. tld /؟ key = 876 - فرض کنید یک هش از مقدار کوکی md5 است.

هنگامی که کاربر روی لینک کلیک می کند و به https می رسد، باید بتوانید این رشته پرس و جو را شناسایی کنید و جلسه درست را که در ناوبری غیر ssl استفاده می کنید بارگذاری کنید.

این باید مشکل شما را حل کند.