2009-06-05 7 views

Répondre

2

Utilisez les éléments suivants:

<configuration> 
    <system.web> 
    <sessionState cookieless="true" 
     regenerateExpiredSessionId="true" /> 
    </system.web> 
</configuration> 

Et citation from MSDN:

ASP.NET maintient la session cookieless état en insérant automatiquement un identifiant de session unique sur l'URL de la page. Par exemple, l'URL suivante a été modifié par ASP.NET pour inclure la session ID unique lit3py55t21z5v55vlm25s55:

http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx

Lorsque ASP.NET envoie une page au navigateur , il modifie les liens Dans la page , en utilisant un chemin d'accès relatif à l'application en intégrant une valeur d'ID de session dans les liens. (Les liens avec les chemins absolus ne sont pas modifiés.) L'état de session est maintenu tant que l'utilisateur clique sur les liens qui ont été modifiés de cette manière. Toutefois, si le client réécrit une URL fournie par l'application , ASP.NET peut ne pas pouvoir résoudre l'ID de session et associer la demande à une session existante. Dans ce cas, une nouvelle session est démarrée pour la demande.

Donc tout ce que vous avez besoin d'ouvrir une nouvelle session pour nouvel onglet est d'ouvrir une URL sans identifiant de session.
EDIT:
Et comme d'autres utilisateurs l'ont mentionné, vous devriez prendre soin de ce 'kung-fu'. Si vous stockez des informations sensibles à l'utilisateur dans la session, veuillez indiquer secure your authentification cookies. Et sachez que lorsque vous utiliserez une clé de session dans une URL, les utilisateurs peuvent la copier et l'envoyer à quelques amis. Et cet utilisateur et ses amis partageront la session unique (ce sera une grande fonctionnalité! :)). Pour éviter cela, vous pouvez effectuer les opérations suivantes:
1. Ajouter une association à l'utilisateur (profil de l'utilisateur, stocker dans la base de données) dans la méthode onSessionStart et la vérifier sur BeginRequest.
2. Cochez la case referrer et créez une nouvelle session (rediriger vers une URL sans session) lorsque le référent est vide ou non égal au domaine actuel (mais sachez que le référentiel peut être défini manuellement)
3. Réécriture de la génération de l'ID de session et de l'associé avec le nom d'utilisateur et ip/mac (xor ou quelque chose comme ça). Et vérifiez cela sur la scène lorsque la session est prise en charge.
4. Autre chose pour rendre cette clé de session valide uniquement pour l'utilisateur actuel.

+0

Utiliser des sessions sans cookie introduit un problème de sécurité vraiment terrible, je ne pense pas qu'il devrait jamais être utilisé. – meandmycode

+2

Pas très facile, beaucoup plus difficile .. sessions cookieless endommager les URL du site, et pire les clients ne se rendent pas compte que s'ils copient et collent l'url .. ils donnent leur session .. quelque chose qui n'arrive pas avec des sessions normales .. comme les utilisateurs ne peuvent pas donner par ignorance leurs valeurs de cookie .. les causes les plus probables de voler des sessions est via XSS sur le site. – meandmycode

+0

Est-ce difficile d'ajouter une certaine association à l'utilisateur dans la méthode onSessionStart? Est-ce difficile de vérifier le référent et de créer une nouvelle session lorsque le référent est vide ou n'est pas égal au domaine actuel? Est-ce difficile de réécrire la génération de l'identifiant de session et de l'associer au nom d'utilisateur et à l'ip/mac? Il y a beaucoup de façons de corriger les cas lorsque les utilisateurs copient et donnent le lien à quelqu'un. Nous pouvons toujours ajouter un gros bouton brillant "copier l'URL actuelle dans le tampon". A propos de XSS, il me semble que vous en savez un peu. Lorsque vous avez un trou XSS, TOUS les cookies peuvent être volés. Vous devriez faire beaucoup plus attention aux cookies auth. – zihotki

1

Le cookie de session est stocké dans un stockage volatile accessible à cette instance du navigateur. Vous auriez besoin d'un navigateur qui supporte le concept que vous recherchez, aucun navigateur n'existe à ma connaissance.

Dans ASP.NET, vous pouvez maintenir une session sans utiliser de cookie de session, c'est vraiment moche et je ne le recommanderais pas mais cela pourrait vous permettre d'atteindre votre objectif.

+0

@Downvoter: Veuillez expliquer? – AnthonyWJones