Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Mes clés de session sous Django disparaissent

+3 votes

J'ai un comportement étrange avec les sessions sous Django.
Dans ma méthode handle de ma classe permettant de créer un formulaire je stocke un variable dans une sessions

class RLForm(forms.SelfHandlingForm):
    datacenter_id = forms.CharField(widget=forms.HiddenInput())
    username = forms.CharField(label=_("User Name"),
                           widget=forms.TextInput(attrs={"autofocus": "autofocus"}),
                           error_messages={
                           'required': _('This field is required.')})

    def clean(self):
        data = self.cleaned_data
        return data

    def handle(self, request, data):
        try:
            [...]
            request.session['datacenter_id'] = datacenter_id
            print(request.session.session_key)
            #datacenter_id est stocké dans ma session
            print(request.session.keys())
            # j'ai bien ma clé datacenter_id dans ma session
            return HttpResponseRedirect(reverse('remote_data_centers:list-remote-networks', args=(datacenter_id,)))
        exept Exception:
            [...]

La destination est une autre class.

class NetView(tables.DataTableView):
table_class = NetDCTable
template_name = 'project/rdc/net.html'

def get_data(self):
    (print(self.request.session.keys())
    # datacenter_id n'existe plus
    datacenter_id = self.request.session['datacenter_id']

Forcément j'ai une belle erreur en retour :

Exception Type:     KeyError
Exception Value:    'datacenter_id'

Voilà les paramètres que j'ai dans mon fichier settings :

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
SESSION_SAVE_EVERY_REQUEST = True 
SESSION_COOKIE_HTTPONLY = True
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_COOKIE_SECURE = False
SESSION_TIMEOUT = 1800

Je comprends pas pourquoi je ne retrouve pas mes valeurs stockés dans ma session. Il doit y a voir une subtilité quelque part.

demandé 20-Mar-2015 par Liced (146 points)

J'imagine que tu as deja eu a effectuer des tests avec les outils livrés par django. J'imagine aussi que tu effectues tes essais en etant bel et bien dans la meme session. Peut tu verifier egalement si ta clé et la seule a disparaitre, ou bien si d'autres clés ont disparu ds l'intervalle.

1 Réponse

+2 votes
 
Meilleure réponse

Le problème venait de la taille limité à 4 Ko du "signed_cookies". Comme j'ai stocké pas mal de chose j'ai franchi cette limite et mes valeurs n'étaient pas stockés dans la session.
Il faut utiliser un autre moteur de session comme db ou cache ou ne pas dépasser cette limite de 4Ko.

répondu 26-Mar-2015 par Liced (146 points)
sélectionné 27-Mar-2015 par Liced

Marque ta réponse comme acceptée, ça servira aux autres ;)

...