"Etkinlik olmaması nedeniyle sayfanın süresi doldu" - Laravel 5.5


111

Kayıt sayfam, formu CsrfToken ( {{ csrf_field() }}) formunda mevcut olarak doğru şekilde gösteriyor ).

Form HTML

<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
        {{ csrf_field() }}
        ....
</form>

Kullanıcılar için dahili kimlik doğrulaması kullanıyorum. Rotalar ve yönlendirmeler dışında hiçbir şeyi değiştirmedim.

Formu gönderdiğimde (ayrıca yeniden yükledikten hemen sonra), sayfanın hareketsizlik nedeniyle kullanım süresinin dolduğunu gösteriyor. Lütfen yenileyin ve tekrar deneyin. hata.

Benim için çok küçük bir şeyi kaçırıyorum. Ama ne olduğundan emin değilim. Herhangi bir yardım?

Güncelleme

Sorunu buldum. Oturum sürücüsü diziye ayarlandı. Dosyaya değiştirildi ve hata şimdi gitti. Ama dizi kullanırsam sorun nedir?


Storage_path'in yazılabilir olmamasıyla bir ilgisi olabilir. Dosya tabanlı oturumlar kullanıyorsanız, belirteçlerle ilgili oturum verilerini depoladığı yerdir.
Devon

1
Sorunu buldum. Oturum sürücüsü olarak ayarlandı array. Dosyaya değiştirildi ve hata şimdi gitti. Ama dizi kullanırsam sorun nedir?
Sougata Bose


1
Laravel'in yeni sürümü için sorunu çözmek için @csrf kullanın.
Vuong Tran

Yanıtlar:


164

Bu yanıta doğrudan bir aramadan geliyorsanız, csrf belirtecini {{ csrf_field() }}OP gibi formunuza zaten eklediğinizden emin olun .


Oturum sürücünüzü dosyaya ayarladıysanız:

Storage_path'in yazılabilir olmamasıyla bir ilgisi olabilir. Dosya tabanlı oturumlar kullanıyorsanız, belirteçlerle ilgili oturum verilerini depoladığı yerdir. İle doğrulanabiliris_writable(config('session.files'))


OP için, oturum sürücüsü dizi olarak ayarlandı. Dizi yalnızca test amaçlıdır. Veriler kalıcı olmadığından, bir sonraki talepte belirteci karşılaştıramayacaktır.

Dizi sürücüsü test sırasında kullanılır ve oturumda depolanan verilerin kalıcı olmasını engeller.

https://laravel.com/docs/5.5/session#configuration


Config / session.php dosyasını kontrol edin

Son olarak, az önce yaşadığım bir sorun, config / session.php'de oturum etki alanına ve güvenli ayarlara sahip bir projemiz vardı, ancak geliştirme sitesi HTTPS (SSL / TLS) kullanmıyordu. Bu, sessions.secure varsayılan olarak true değerine ayarlandığı için bu genel hataya neden oldu.


3
Tamam. Ama şimdilik geliştirme aşamasında. Öyleyse dizi kullanırsam, neden bana bu hatayı veriyordu?
Sougata Bose

@SougataBose testi geliştirme değildir. Dizi verileri kalıcı değil ...
Devon

DOC'lardan düzgün bir şekilde geçmenin nedeni budur .. :)
Sougata Bose

Sorunum çözülmedi. Temelleri gerçekten yaptım. Ancak özel sağlayıcılar ve hizmetler kullanıyorum. Bir denetleyici yöntemini çağırdığımda sorun olmuyor ama istek sonrası çağrılan bir denetleyicide bir hizmet yöntemi çalıştırdığımda sorun çıkıyor!
Behnam Azimi

1
Seanslarla ilgili benzer bir sorun yaşadım, ancak test konusunda. Ben kullanıyordum zaman ortaya çıktı Carbon::setTestNow($time);ben kullanarak bunları temizlemek değildi testlerde Carbon::setTestNow();sonradan.
riotCode

77

Laravel 5.5'te de aynı sorunla karşılaştım. Benim durumumda, GET'ten POST'a bir rota değiştirdikten sonra oldu. Sorun, POST'a geçtiğimde bir CSRF belirtecini iletmeyi unutmamdı.

Aşağıdaki numarayı arayarak formunuzda bir CSRF belirteci gönderebilirsiniz:

 {{ csrf_field() }}

Veya rotanızı app / Http / Middleware / VerifyCsrfToken.php'de hariç tutun

 protected $except = [
        'your/route'
    ];

2
csrf_field()formda mevcut. Kabul edilen cevap sorunu açıklar. Teşekkürler.
Sougata Bose

1
Benim durumumda, üçüncü bir taraftan bir POST alıyordum, bu nedenle csrf_field () eklemek bir seçenek değildi. Benim durumumda CSRF bir faktör olmadığından, bu rotaya bir istisna eklemek sorunu çözdü. Teşekkürler.
Fábio Duque Silva

Sorunum çözülmedi. Temelleri gerçekten yaptım. Ancak özel sağlayıcılar ve hizmetler kullanıyorum. Bir denetleyici yöntemini çağırdığımda sorun olmuyor ama istek sonrası çağrılan bir denetleyicide bir hizmet yöntemi çalıştırdığımda sorun çıkıyor!
Behnam Azimi

1
Lütfen CSRF doğrulamasını devre dışı bırakmayın! Korumak için sahip olmak çok önemlidir. Jetonu doğru şekilde nasıl göndereceğinizi ve oturum açmış kullanıcılarınızı, onlar adına eylemler gönderebilecek kötü amaçlı javascript'ten nasıl koruyacağınızı öğrenin.
Devon



6

Benim durumum ile çözüldü SESSION_DOMAIN, yerel makinemde ayarlanması gerekiyordu xxx.localhost. Bu üretimle çatışmaları neden oluyordu SESSION_DOMAIN, xxx.comsession.php yapılandırma dosyasında doğrudan kuruldu.


Hangi oturum sürücüsünü kullanıyordunuz? fileveya cookie?
KeitelDOG

4

Bazı bilgiler, geliştirilmekte olan laravel'in önceki sürümleriyle ilgili çerezde saklanır. Bu nedenle, başka birinin sürümleri tarafından üretilen csrf tarafından oluşturulan tokenlerle çelişiyor. Sadece çerezi temizleyin ve bir deneyin.


<input type="hidden" name="_token" value="Umr1AlG3sScdUWGtMoHcQPPKASsR7qsd5ZE1H3Xv">oluşturulan html'de bir çeşit kod görebildiniz mi?
Suresh Velusamy

Orada. Sorunu buldum. Oturum sürücüsü diziye ayarlandı. Dosyaya değiştirildi ve hata şimdi gitti.
Sougata Bose

4

Hala sorunu olanlar için ve hiçbir şey yardımcı olmadı. Php.ini mbstring.func_overload parametresine dikkat edin. 0'a ve mbstring.internal_encoding UTF-8'e ayarlanmalıdır. Benim durumumda bu bir problemdi.


Çok teşekkür ederim! Cevabınız beynimi çökmekten kurtardı)
Rustembek Kaliyev

3

Depolama iznini değiştirdim ve hata gitti. Mesele izin eksikliği gibi görünüyordu.

sudo chmod -R 775 storage/

2
Bu tür açık izinleri tekrar tekrar kullanırken dikkatli olun. Dosyalar için 775'e karşı şiddetle tavsiye ederim. Dizinler için 755 ve dosyalar için 644 normdur.
Devon

3

@csrfforma ekleyin ve ayrıca VerifyCsrfToken.php'ye gidin

app-> Http-> Middleware-> VerifyCsrfToken.php

protected $except = [
        'paste your route here'
    ];

1

Benim durumumda, site sunucuda iyiydi ancak yerelde değildi. Sonra güvenli bir web sitesinde çalıştığımı hatırlıyorum.
Bu yüzden config.session.php dosyasında, secure değişkenini false olarak ayarlayın

'secure' => env('SESSION_SECURE_COOKIE', false),

0

Birden fazla alt etki alanına sahip uygulamaya sahiptim ve bunlar arasındaki sorun oturum çereziydi. Çerezleri temizlemek sorunumu çözdü.

Ayrıca ayarlamayı deneyin SESSION_DOMAINiçinde .env dosyaya. Göz atmakta olduğunuz tam alt alanı kullanın.


0

Web sunucunuzda doğru sistem saatine sahip olduğunuzdan emin olun. Benim durumumda, serseri makine gelecekti (26 Ocak 14:08:26 UTC 2226), bu yüzden tabii ki tarayıcımın oturum tanımlama bilgisindeki süre yaklaşık 200+ yıl önce sona ermişti.


0

mbstring.func_overload = 2 olarak ayarlayın

Bana yardımcı oldu


0

Bu hatayı önlemek için iki çözüm buldum 1) korumalı $ exclu = ['/ yourroute'] ekleyerek csrf belirteci denetimini tanımlanan kökten devre dışı bırakma olasılığı. 2) sadece çekirdekteki korumalı ara yazılım grubundaki \ App \ Http \ Middleware \ VerifyCsrfToken :: sınıf satırını yorumlayın


0

Ben de aynı problemi yaşadım ama problem çerçevede değil tarayıcıda. Nedenini bilmiyorum ama benim durumumda google chrome çerezleri otomatik olarak engelliyor. İzin verilen çerezlerden sonra sorun çözüldü.


0

Kısa cevap

İçin rota girişi ekle registeriçindeapp/Http/Middleware/VerifyCsrfToken.php

protected $except = [
        '/routeTo/register'
    ];

ve önbelleği ve önbellek yolunu şu komutlarla temizleyin:

php artisan cache:clear && php artisan route:clear

ayrıntılar

Bir Laravel sitesine her eriştiğinizde, oturum başlatılmamış olsa bile bir belirteç oluşturulur. Daha sonra, her istekte, bu belirteç (çerezlerde saklanan) SESSION_LIFETIME, config/session.phpdosyadaki alanda belirlenen sona erme süresine göre doğrulanacaktır .

Siteyi son kullanma süresinden daha uzun süre açık tutarsanız ve bir talepte bulunmaya çalışırsanız, bu jeton değerlendirilecek ve sona erme hatası geri dönecektir. Bu nedenle, kimliği doğrulanmış kullanıcıların (kayıt veya oturum açma gibi) işlevleri dışındaki formlarda bu doğrulamayı atlamak için, içeriye dışsal yolu ekleyebilirsiniz app/Http/Middleware/VerifyCsrfToken.php.


1
Bu sayfa kullanıcı girişini işliyorsa , CSRF kontrollerinden geçmelidir .
Sougata Bose

@SougataBose Gerçekten, bu durumda Google reCAPTCHA olarak captcha doğrulayıcı kullanmanın en iyisi olduğunu düşünüyorum
JC Gras

0

Çoğu zaman, projeyi geçmişte test ettiğiniz için oluyor


0

Çözüm:

gizli modda yeni sekme kullanın ve ardından tekrar test edin.

nedeni:

benim durumumda başka bir kullanıcı yönetici panelimle oturum açtı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.