2016-01-29 18 views
6

Tôi gặp vấn đề lạ với ứng dụng Laravel 5.1.Laravel 5.1 thả dữ liệu phiên ngẫu nhiên

Không liên tục, nó sẽ làm giảm dữ liệu phiên. Tôi đã phát hiện ra điều này bằng cách viết một số phần mềm trung gian viết nội dung của phiên cho yêu cầu đó vào tệp nhật ký. Mặc dù ID phiên (Session::getId()) không thay đổi, giá trị của _token trong dữ liệu phiên được truy xuất với Session::all()không.

Như tôi nói, điều này xảy ra không liên tục. Tôi có thể làm mới cùng một URL nhiều lần và sau đó ngẫu nhiên vào một lần làm mới dữ liệu phiên đã biến mất và giá trị _token khác với các yêu cầu trước đó.

Điều gì sẽ gây ra điều này? Tôi cũng đã nhận thấy đối tượng flash không có trong dữ liệu phiên "bị bỏ".

Dưới đây là một đoạn trích nhật ký. Bạn có thể thấy nội dung của khóa session_data ngẫu nhiên thay đổi "hình dạng" trong hai dòng cuối cùng, nhưng ID phiên vẫn không đổi.

Ngoài ra, không chắc chắn nếu nó phù hợp, nhưng tôi đã bật DebugBar.

Screen-shot

UPDATE: Qua gỡ lỗi, tôi đã tìm thấy rằng trên một số trang tải phiên là hoàn toàn trống, như trong, không _token (vì thế một cái mới bị tạo ra). Không có gì.

+0

Điều này xảy ra thường xuyên như thế nào? Bởi vì tôi đã cố gắng tái tạo điều này bằng cách kích hoạt DebugBar, tạo một phần mềm trung gian ghi nhật ký id phiên và dữ liệu dưới dạng JSON tuần tự giống như bạn đang làm, sau đó được gọi là một tuyến đường có chế độ xem tự động làm mới mỗi giây và để nó như thế Khoảng 10 phút. Nhưng nó không làm mới mã thông báo CSRF hoặc thả bất kỳ dữ liệu phiên nào.Điều này đã được thực hiện với 'artisan serve' và trình điều khiển phiên' file', vì vậy bạn có thể muốn đăng thêm thông tin về môi trường của bạn. – Bogdan

+0

Điều này xảy ra sau mỗi một hoặc hai phút. Ứng dụng đang chạy dưới Apache. Tôi có thể làm mới URL và nó sẽ mất dữ liệu ngẫu nhiên theo ảnh chụp màn hình sau một số lần làm mới. Không có mô hình thực sự, nó đang cố gắng tìm ra nguyên nhân khó khăn. –

+0

Đề xuất đầu tiên của tôi là cố gắng tái tạo vấn đề bằng cách cài đặt sạch Laravel một cái gì đó theo những gì tôi đã mô tả trong bình luận đầu tiên của mình, ít nhất là xem có vấn đề gì với mã ứng dụng của bạn hay không. thiết lập của bạn. – Bogdan

Trả lời

0

Nếu bạn sử dụng Linux, hãy thử sử dụng Redis (http://redis.io) làm trình quản lý phiên/bộ đệm trong laravel. Tôi đã có một số vấn đề trong quá khứ với văn bản/cookies và laravel trong một số máy chủ. Khi tôi lắp đặt Redis, tôi không còn vấn đề gì nữa.

Thông tin thêm: https://laravel.com/docs/5.1/redis

+0

Cảm ơn, nhưng một người lái xe thay thế không thực sự giải quyết vấn đề. Môi trường dàn dựng của chúng tôi đang sử dụng trình điều khiển tệp và điều này xảy ra. –

+0

Bạn có thể thử trình điều khiển Cơ sở dữ liệu không? Nó sẽ tồn tại trong một bảng cơ sở dữ liệu thay vào đó, có thể nó hoạt động. https://laravel.com/docs/5.1/session –

2
  1. Nếu bạn đang sử dụng trình điều khiển tập tin, bạn có thể chạy vào điều kiện chủng tộc trên yêu cầu đồng thời. Tập tin sau đó bị cắt ngắn, Laravel không thể đọc nó, do đó nó làm mới phiên. Điều kiện cuộc đua cũng có thể dẫn đến một triệu chứng mà một cái gì đó bạn đang đưa vào phiên giao dịch chỉ không được đặt. Điều này có xu hướng ngẫu nhiên, do đó rất khó để gỡ lỗi. Theo nhóm Laravel, đây là một giới hạn được biết đến của trình điều khiển tệp và dường như nó không được sửa chữa, vì vậy tôi sẽ đề nghị sử dụng một trình điều khiển khác. Điều này sẽ khắc phục sự cố làm mới phiên ngẫu nhiên của bạn, nhưng nó vẫn giới thiệu khả năng thực hiện thay đổi cho phiên không được thêm. Theo tôi biết, tại thời điểm này với Laravel 5.1, bạn sẽ phải tự mình quản lý.

  2. Bằng cách nào đó dữ liệu phiên của bạn quá dài và bị cắt bớt. Nếu bạn đang sử dụng trình điều khiển cơ sở dữ liệu (chưa thử nghiệm các trình điều khiển khác) và bạn cố gắng lưu dữ liệu phiên dài hơn độ dài trường, thì các yêu cầu tiếp theo sẽ không thể kéo từ phiên này và bạn sẽ có gió với một phiên mới. Nếu sự cố này xảy ra ngẫu nhiên với dữ liệu phiên rất ngắn, thì đó có thể là nguyên nhân được liệt kê ở trên.

Các vấn đề liên quan