Tout d'abord, ajouter un champ à la table de vos utilisateurs pour stocker l'ID de session actuellement utilisé. Cet identifiant est facilement accessible depuis votre code. Lorsque l'utilisateur se connecte, stockez cet ID.
À chaque demande de page, vérifiez que l'ID de session actuel correspond à ce qui était stocké dans votre table utilisateur. Si elle ne correspond pas, effacez les données de session en cours et renvoyez l'utilisateur à l'écran de connexion.
Cela n'empêchera pas l'utilisateur d'utiliser plusieurs onglets dans IE 7 car IE7 utilise la même instance pour chaque onglet; mais cela les empêchera d'utiliser plusieurs instances de navigateur.
La raison pour laquelle cela fonctionne est que chaque navigateur contient son propre espace de cookie. Les sessions sont appariées côté serveur en fonction d'une valeur de cookie qui stocke l'identifiant de session et est renvoyée au serveur à chaque requête. Incidemment, ce n'est pas un moyen très efficace d'éliminer le piratage de session; ce que cela ressemble à la vérification de sécurité essaie d'empêcher. Si vous avez besoin de le faire, mettez à jour votre question et j'irai plus loin.
MISE À JOUR
Une façon d'arrêter le vol de session est de stocker un nombre aléatoire dans la session et comme un cookie sur le navigateur. Lorsque la requête suivante arrive, vérifiez que les valeurs de cookie et de session correspondent. Si ce n'est pas le cas, réinitialisez la variable d'ID de session dans votre table utilisateur. Cela forcera toutes les sessions à se reconnecter. Pour chaque requête de page (post/get), créez une nouvelle valeur aléatoire. L'inconvénient est que les pages ne peuvent pas être mises en signet; mais c'est probablement acceptable.
Pouvez-vous clarifier s'il vous plaît. Si l'utilisateur se connecte à partir d'un autre ordinateur/navigateur, sa session dans les autres navigateurs cesse et continue dans le nouveau navigateur? –
oui correct - l'utilisateur se connecte depuis une autre machine/navigateur et sa session dans les autres navigateurs cesse et continue dans le nouveau navigateur –
@Ian: Je suis d'accord que le "Spec" est trop lâche, et si une autre instance d'IE est utilisée? Est-ce que nous disons que généralement un seul processus de navigateur peut avoir une session active pour un utilisateur? – AnthonyWJones