2017-04-25 1 views
1

Mit einem seltsamen Problem, Sitzung nicht gespeichert, wenn Ajax Anfragen von js (localhost).Ajax und PHP Sitzung Problem, einfache Test wird nicht arbeiten

Ich habe eine einfache Demo erstellt, von der ich erwartet habe, dass sie funktioniert, aber die Sitzung wird nie gespeichert. Wenn ich jedoch direkt von meinem Webbrowser auf das PHP-Skript zugreife, funktioniert es wie erwartet und speichert die Sitzung.

HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta charset="utf-8" /> 
    <script src="js/jquery-1.8.0.min.js"></script> 
</head> 
<body> 

<script type="text/javascript"> 
    $(function(){ 
     $.ajax({ 
      dataType: 'json', 
      url: 'http://example.com/test.php', 
      method: 'GET', 
      success: function(response) { 
       console.log(response); 
      }, 
      error: function(error) { 
       console.log(error); 
      } 
     }); 
    }); 
</script> 

</body> 
</html> 

PHP:

<?php 

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

/* Session start */ 
session_start(); 

/* Set headers */ 
header('Access-Control-Allow-Origin: *'); 
header('Content-Type: application/json'); 

if (!isset($_SESSION['test'])) { 
    $_SESSION['test'] = 'abc'; 
    $result = 'session_set'; 

} else { 
    $result = $_SESSION['test']; 
} 

echo json_encode(array('result' => $result)); 

?> 
+0

Überprüfen Sie auf Fehler in der Konsole und in Ihrem PHP-Skript. – Jer

+0

Keine PHP-Fehler und keine js-Konsolenfehler. Überprüfte php Protokolldateien und versuchte, 'ini_set ('display_errors', 1) hinzuzufügen; ini_set ('display_startup_errors', 1); error_reporting (E_ALL); 'zum Anfang des PHP-Skripts. Allways gibt "session_set" zurück. –

+0

Sie versuchen, 'ajax' aufzurufen, wenn die Seite geladen ist. Also benutze '$ (function() {... // deine ajax Methode .... //})' –

Antwort

0

Es ist Cross-Domain-Beschränkung, ist das nicht ein Problem?

+1

'Header ('Access-Control-Allow-Origin: *');' sollte das lösen? –

+0

Hängt davon ab. Ich denke, Sie können keine Session auf www.site-one.com erstellen, indem Sie sie auf www.site-two.com aufrufen. Kopfzeile ('Access-Control-Allow-Origin: *'); Aktivieren Sie Ajax, um Site-one.com aufzurufen. – Honzy

+0

Ich habe es schon einmal gemacht. Erstellt eine hybride mobile Anwendung, die PHP-Backend verwendet und ich habe mich eingeloggt und es Session richtig gespeichert und alles hat funktioniert.Das ist wie vor 3-4 Jahren. –

0

Überprüfen Sie zunächst, ob Ihr Browser den Header Set-Cookie vom Server auf der AJAX-Anfrage empfängt.

Zweitens, überprüfen Sie, ob der Browser das Cookie speichert und es bei nachfolgenden Anfragen sendet, und Sie erhalten keine neue Set-Cookie Antwort vom Server.

Wenn eine der obigen Aussagen falsch ist, liegt möglicherweise ein Problem mit der Serverkonfiguration vor, z. B. ist die Sitzungs-ID so eingestellt, dass sie in der URL gespeichert wird - was natürlich nicht funktioniert.

Sorry, es zu sagen, aber es funktioniert für mich auf localhost.


Wenn Sie versuchen, diese Cross-Domain zu tun, na ja, das ist unmöglich, weil Cross-Domain-Cookies bestehen nicht.

+0

Ja, es funktioniert, wenn beide Dateien auf localhost sind. Aber ich möchte eine Cross-Domain-Anfrage machen. Wo die PHP-Datei auf example.com ist und die js läuft auf localhost. –

+0

Oh, tut mir leid, wahrscheinlich die Frage falsch gelesen. Wird sich ändern. – Somrlik