2015-10-10 1 views
0

Я использую sessionStorage успешно в проекте с одной оговоркой: я не могу устранить хранилище с помощью оператора clear(), как описано.sessionStorage.clear() не работает

Я делаю это при выходе из административного режима моего сайта, который включает в себя нажав на пункт Log Out в списке, как это:

<li><a href="admin_logout.php">Log Out</a></li> 

admin_logout.php файл затем уничтожает переменные сессии, и т. д., а затем перенаправляется на главную страницу сайта. Его предыдущей формой, которая работает, является:

<?php 
session_start(); 
session_destroy(); 
@header('Location:./'); 
exit; 
?> 

Это все работает нормально. То, что я не могу интегрировать в рутину, - это очистка sessionStorage. Текст моего admin_logout.php файла, я пробовал:

<?php 
session_start(); 
?> 

<script> 
sessionStorage.clear(); 
</script> 

<?php 
session_destroy(); 
@header('Location:./'); 
exit; 
?> 

... а также:

<?php 
session_start(); 

echo '<script>'; 
echo 'sessionStorage.clear();'; 
echo '</script>'; 

session_destroy(); 
@header('Location:./'); 
exit; 
?> 

Возможно, указывая на основную причину в том, что, когда я поставил:

?> 
<script> 
alert("HELLO"); 
</script> 
<?php 

... в этом скрипте предупреждение никогда не выполняется, но все остальное. Как я могу вызвать операцию на основе sessionStorage.clear(), чтобы очистить элементы хранения сеанса в рамках описанной выше процедуры?

ответ

0

Я думаю, это потому, что вы перенаправляетесь на серверную сторону, а sessionStorage.clear() происходит на стороне клиента. Я верю, что вы перенаправляетесь, прежде чем у вас появится шанс на запуск.

+0

Почему бы не предупредить() не запускать, если оно находится в том же месте в файле? Он должен работать независимо. Вот почему я подозрительный. – Tom

+0

предупреждение также является клиентским кодом. Javascript вообще не имеет возможности запускаться, потому что вы перенаправляете его до того, как он будет отображаться в браузере. – allicarn

+0

Вы были правы ... Мне пришлось отключить обратный вызов, чтобы он работал. Я отправлю ответ. – Tom

1

Allicam был прав; Мне нужно было инкапсулировать код очистки хранилища в функцию обратного вызова:

<?php 
session_start(); 
session_destroy(); 
<script type="text/javascript"> 

function firstFunction(_callback){ 
    sessionStorage.clear(); 
    _callback(); 
} 

function secondFunction(){ 
    firstFunction(function() { 
     window.location = './'; 
    });  
} 
secondFunction(); 
</script> 
+0

Была ли та же самая проблема, за исключением моего предупреждения. Tks – yardpenalty