2012-05-23 4 views
7

Trong một trang của trang web của chúng tôi, tôi có mã này:PHP phiên biến không nhận được thiết

$_SESSION['returnURL'] = "/store/checkout/onepage"; 

và tiếp tục xuống, nút điều khiển này:

<button type="button" title="Register Today" class="button" onclick="window.location = '/register/';" id="BecomeMember"><span><span>Become a Member Today</span></span></button> 

Bây giờ, trong các mẫu đăng ký, Tôi có mã này:

<input type="hidden" name="returnURL" id="returnURL" value="<?php if(isset($_SESSION['returnURL'])) { echo $_SESSION['returnURL']; } else { echo '/'; } ?>" /> 

Nhưng chỉ hiển thị giá trị là /.

Điều gì có thể xảy ra đang gây ra điều này?

+1

session_start() được gọi ở nơi khác. – MB34

+0

Tôi đã in mảng $ _SESSION trong mẫu đăng ký và nó là một mảng trống. – MB34

+0

Mẫu đăng ký te có được bao gồm trong trang trên hay không hoặc biến có được chuyển đúng không? Mã của bạn cho mẫu là gì – Ray

Trả lời

0

Những gì tôi đã kết thúc làm được gửi một biến đường bưu điện đến trang. Sự khác biệt trong các phiên giữa ExpressionEngine và Magento làm cho điều này trở nên nghiêm trọng khi sử dụng các biến phiên cũng như cookie.

9

first.php

<?php 
session_start(); 
$_SESSION['returnURL'] = "/store/checkout/onepage"; 
echo '<a href="second.php">Pass session to another page</a>'; 
?> 

second.php

<?php 
session_start(); 
echo 'returnURL = ' . $_SESSION['returnURL']; 
?> 

Vì vậy, bạn cần phải viết session_start() trong cả hai tập tin của bạn

+0

Nếu tôi đặt session_start() trong tệp này, tôi nhận được Phiên đã được bắt đầu cảnh báo. – MB34

+0

Bạn cần mô tả cấu trúc tập lệnh của mình chi tiết hơn: phiên tập tin nào bắt đầu, cách bạn chuyển sang tệp khác và v.v. Mã tôi viết chỉ là cách tiếp cận chung. – DaneSoul

+0

Xem nhận xét trong bài đăng gốc. – MB34

1

Để giải quyết vấn đề này, bạn sẽ cần phải:

1) Đảm bảo rằng session_start() được gọi vào đầu kịch bản, trước bất cứ điều gì khác.

2) Không có gì đang thiếu $_SESSION hoặc $_SESSION['returnURL'].

+0

Nếu tôi đặt session_start() trong tệp này, tôi nhận được Phiên đã được bắt đầu cảnh báo. – MB34

+0

Đệm đầu ra sẽ khắc phục sự cố đó – Ray

+0

Không thể thực hiện, xem nhận xét trong bài đăng gốc. – MB34

0

tôi đã có thể để có được điều này để làm việc như thế này

session_start(); 
$returnurl = "/store/checkout/onepage"; 
$_SESSION['returnURL'] = $returnurl;   
+0

Đó chính xác là những gì DaneSoul đã làm. – MB34

0

Tôi chỉ quỹ tôi có cùng một loại vấn đề, phiên làm việc tốt trong firefox nhưng không phải chrome, tôi đã tạo tập lệnh thử nghiệm để tạo phiên và sau đó in session_id() để xem nó có phải là nhận được tạo ra hay không, sau khi chạy kịch bản này tôi nhận thấy rằng session_id() sẽ thay đổi trên mỗi tải trang và php đã ném một cảnh báo về ngày/thời gian không được thiết lập. Sau đó tôi đã thêm

date_default_timezone_set ('America/Los_Angeles');

để bắt đầu tập lệnh, điều này đã chặn phiên session_id() mới được tạo trên mỗi lần tải trang và khắc phục sự cố. (có thể đáng lưu ý rằng vấn đề của tôi dường như chỉ hiển thị trên tên miền phụ của tôi và không phải là tên miền cấp cao nhất)

0

máy chủ Tôi đang làm việc đã đầy và do đó phiên không hoạt động vì không có không gian để lưu trữ các giá trị. Đảm bảo máy chủ của bạn có dung lượng.

+0

Câu hỏi này đã có câu trả lời được chấp nhận. –

0

Tôi đã thấy nhiều CMS và khung có cách xử lý các phiên thông thường khác nhau. Nếu hai lớp lót cơ bản được mô tả ở trên không hoạt động (vì nó cản trở phần mềm hiện tại), bạn vẫn có thể sử dụng cookie cho cùng một chức năng. Hãy nhớ rằng, cookie không bị xóa khi đóng trình duyệt, vì vậy bạn cần phải nói rõ ràng khi nào giải phóng biến (sử dụng unset).

$_COOKIE["something"] = 'value'; 
echo $_COOKIE["something"]; 
unset($_COOKIE["something"]);