2010-05-09 5 views
1

J'ai un problème dans la session de récupération côté serveur avec l'utilisation de la requête ajax post. Voici mon exemple de code:Problème de session Codeigniter + ajax (jQuery)

JavaScript:

$(function() { 
    $('.jid_hidden_data').submit(function() { 
     var serialized = $(this).serialize(); 
     var sUrl = "http://localhost/stuff"; 
     $.ajax({ 
      url: sUrl, 
      type: "POST", 
      data: serialized, 
      success: function(data) { 
       alert(data); 
      } 
     }) 
     return false; 
    }); 
}); 

CodeIngiter côté (PHP):

function stuff() 
{ 
    $post_stuff = $this->input->post('my_stuff');  // WORKS PERFECTLY 
    $user_id = $this->session->userdata('user_id'); // RETURNS NULL 
} 

Où commenté retourne NULL, il doit renvoyer des données de session des utilisateurs, car il existe vraiment. Quel est le problème? La publication de méthode n'obtient pas de cookies ou quoi? Merci pour toute aide!

Mise à jour:

Pour obtenir des éclaircissements i ont mis en session avec $ this-> session-> set_userdata ($ data). Et je n'ai pas de problème lors de la publication sans js/ajax. Je veux dire avec une forme simple soumettre ça fonctionne bien.

+0

Comment savez-vous qu'il existe? Les données sont-elles dans un cookie ou dans une session? – Galen

+0

Son get comme ceci $ this-> session-> set_userdata ($ data) après la connexion. Aussi, je n'ai pas de problème lors de la publication sans js/ajax, mais avec un formulaire simple. – faya

+0

Pouvons-nous voir comment vous servez les données à la requête ajax? – bschaeffer

Répondre

5

J'ai eu un problème similaire lors de l'accès à une application CI en utilisant différents noms de domaine. Même si ces noms de domaine pointaient vers le même serveur web, j'ai eu deux sessions distinctes.

Par exemple, considérons ce contrôleur:

class User extends Controller 
{ 
    function User() 
    { 
     parent::Controller(); 
     $this->load->library('session'); 
    } 

    function login() 
    { 
     $this->session->set_userdata('login_token', true); 
     echo 'finished logging in'; 
    } 

    function logout() 
    { 
     $this->session->unset_userdata('login_token'); 
     echo 'finished logging out'; 
    } 

    function status() 
    { 
     if ($this->session->userdata('login_token')) 
     { 
      echo 'logged in'; 
     } 
     else 
     { 
      echo 'not logged in'; 
     } 
    } 
} 

j'accéder aux URL suivantes dans l'ordre. A côté de chaque URL est la sortie correspondante:

http://localhost/app/user/login « fini connecter »

http://localhost/app/user/status « connecté »

http://127.0.0.1/app/user/status « non connecté »

Ainsi la session que j'ai quand l'accès à l'application sur localhost ne passe pas à 127.0.0.1, même si je suis sur le même serveur web.

Est-ce que le nom de domaine de l'URL de votre script AJAX est différent de celui de l'URL avec laquelle vous testez?

+0

oui, c'est un problème que j'avais. Bien que résolu avant votre réponse. De toute façon, merci beaucoup! :) – faya

+1

J'ai eu le même problème, et après avoir lutté pendant trois jours avec Sessions, CSRF, etc. J'ai finalement lu, ceci, changé 'localhost' à 127.0.0.1 dans ma demande jQuery AJAX, et le problème a disparu comme par magie. +100 pour la réponse précédente. –