2011-08-29 36 views
5

Tôi đang viết một ứng dụng web bằng Symfony 1.3. Tôi gặp vấn đề với các biến phiên của tôi bị mất sau khi tôi gọi một hành động thông qua cuộc gọi $.ajax() của jQuery. Sự việc xảy ra theo thứ tự này:Symfony, jQuery.ajax() gọi, biến phiên bị mất

  1. Một hành động thiết lập biến phiên như thế này:

    $this->getUser()->setAttribute('uploaded-files', $uploadedFiles); 
    
  2. Sau đó, khi hành động kêu gọi các thành phần xem, kết quả trang HTML chứa các cuộc gọi sau đây:

    $.ajax({ 
        type: "POST", 
        url: '<?php echo url_for("content/merge"); ?>', 
        cache: false, 
        success: mergingCompleteCallback 
    }); 
    
  3. Tôi nhấp vào nút kích hoạt cuộc gọi ajax ở trên. Cuộc gọi thực hiện phương thức hành động tương ứng, nhưng khi tôi in nội dung của biến phiên 'tệp đã tải lên', nó sẽ trống.

    Tôi cũng đã kiểm tra xem id phiên có giữ nguyên giữa cuộc gọi đến trang đặt biến và trang đọc biến (cuộc gọi ajax) và id phiên không thay đổi hay không. Tôi đã tìm kiếm hàng giờ trực tuyến và tôi không thể tìm được giải pháp.

+2

Bạn in nội dung ra sao và nội dung là gì? Khi yêu cầu ajax sử dụng cùng một cookie phiên như bất kỳ yêu cầu nào khác, không có lý do gì khiến các biến phiên của bạn bị mất trên Ajax và không phải trên các yêu cầu thông thường. – Gerry

+0

Xin chào. Cuộc gọi AJAX chỉ trả về một đường dẫn đến một tập tin thông qua một cuộc gọi lại. Yêu cầu URL gọi một hành động gọi một hệ thống gọi pdftk (một số tham số) và sau đó trả về một cuộc gọi lại với đường dẫn đến tên tệp. Vấn đề mà tôi đang gặp phải là hành động đặt tại url_for ("nội dung/hợp nhất") không thấy biến phiên ($ this-> getUser() -> getAttribute ('attr_name');). Tuy nhiên, khi tôi chạy lệnh này bằng cách nhập trực tiếp URL vào trình duyệt, do đó không sử dụng AJAX, biến phiên được tải đúng cách. Đó là điều khiến tôi khó chịu. Tôi mong đợi hành vi tương tự mà bạn mô tả. Cảm ơn! – pkout

+1

có thể bạn cookie phiên là httponly, là trường hợp này jquery không thể gửi nó. –

Trả lời

1

Bạn cũng có thể thêm các giá trị phiên vào cuộc gọi, theo cách đó bạn không phải thực hiện nó trong cuộc gọi AJAX. Đó là một chút hacky, nhưng nó sẽ làm việc.

Bạn có thấy biến phiên trong thanh dev không? Có lẽ bộ nhớ đệm của nó, tôi đã có một vấn đề bộ nhớ đệm như thế này trước đây.

+0

Biến toàn cục Biến chỉ hiển thị sau khi tải lại trang. Phiên người dùng cũng hiển thị nhưng là khóa.Tôi không thể thay đổi giá trị thành Phiên người dùng. – trouble

3

tôi đã có vấn đề tương tự, và vấn đề này đã được rằng tôi đã sử dụng giá trị máy chủ để lưu trữ các tập tin cookie với 'www' tức là www.mydomain.com và tôi đã làm theo yêu cầu Ajax không có 'www'

Các giải pháp là sử dụng ký tự đại diện như máy chủ lưu trữ. Giống như .mydomain.com làm máy chủ lưu trữ cookie phiên của bạn trên trình duyệt.

Chỉ cần chắc chắn rằng bạn không phải là nạn nhân của điều này?

+0

không giải quyết được vấn đề của tôi! tôi không biết tại sao u kiếm được tiền thưởng nhưng cảm ơn bạn đã trả lời! – trouble

+0

hahaha đó là bình luận hài hước – Emiliano

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