2010-10-27 12 views
3

Je ne voulais pas les développeurs qui intègrent ma webapp pour être en mesure de passer un paramètre dans l'URL comme ?style=dark qui va modifier le CSS en conséquence. Existe-t-il un meilleur moyen de conserver ce paramètre lorsque l'utilisateur navigue qu'ajouter ?style=dark à tous les liens?Comment garder un paramètre url à travers les pages

J'ai pris en compte les cookies, mais si un utilisateur consulte deux pages qui intègrent mon application avec des thèmes différents, l'un remplacera l'autre. J'utilise Python/Django. J'utilise Python/Django.

+0

Les cookies sont spécifiques au domaine. Ils peuvent également contenir un chemin. –

+0

Cela serait probablement utilisé en intégrant ma webapp dans un autre site dans un iframe, donc le domaine du cookie est mon domaine sur tous les sites qui l'intègrent. – Jake

+0

Exécution d'un serveur Apache? Vous pourriez utiliser MOD_REWRITE pour changer (http://example.com/dark/page.html) en (http://example.com/page.html?style=dark) Cela ferait en sorte que votre application ne devrait pas s'inquiéter de garder la trace de l'état. –

Répondre

2

Si vous ne souhaitez utiliser des témoins ni sessions et ne veulent pas l'intégrer dans les URL, les seules alternatives qui me vient à l'esprit sont:

D'abord le plus générique: Utilisez un domaine factice devant. Au lieu de www.example.com, utilisez h ** p: //THEME.example.com/PATH. Cela fonctionne même pour HTTPS si vous possédez un SSL générique pour * .example.com.

Une deuxième variante serait de créer un Basic-Auth-Handler qui utilise le thème comme nom d'utilisateur avec un mot de passe fictif. L'URL alors peut ressembler à:

h ** p: //[email protected]/PATH

Cependant, je ne suis pas sûr de ce qui se passe si un utilisateur se connecte au même site avec deux thèmes différents dans le cas Basic-Auth. En outre, il est un peu difficile de rendre le site disponible pour les moteurs de recherche s'il est derrière un gestionnaire d'authentification. C'est parce que vous devez avoir un auth-handler aujourd'hui pour contourner la protection anti-phishing dans les navigateurs modernes.

Notez qu'avec les deux méthodes, vous ne pouvez avoir qu'un seul paramètre facilement. Le mot de passe ne compte pas et il existe des navigateurs qui n'acceptent pas un certificat SSL générique * .example.com pour PARAM1.PARAM2.example.com.

+1

J'ai envisagé d'utiliser un sous-domaine mais malheureusement je veux utiliser SSL et avoir un certificat pour 10 sous-domaines spécifiques, pas un sous-domaine générique. Je n'ai pas testé, mais je suis assez sûr que l'authentification de base aura le même problème que les sessions. Je pense que je vais juste devoir m'assurer que les paramètres get sont ajoutés à tous les liens. Je vais écrire une balise de modèle Django pour aider. – Jake

+0

Les domaines génériques ne sont pas plus chers, vous pouvez les obtenir pour moins de 50 $ par 2 ans (malheureusement ces certificats ne fonctionnent pas encore pour Android). Je ne veux pas faire de publicité, vous devez donc le trouver vous-même. – Tino

0

Je ne suis pas exactement sûr, mais de toute façon vous devriez passer cette variable à votre site. Avec cela je veux dire, qu'il n'y a pas de différence si vous ajoutez ?style=dark à vos href, ou rel="dark" à vos <a> pour une utilisation avec javascript. garder à l'esprit que c'est juste un exemple

Ofcourse vous pouvez toujours travailler sur cette AI pour prédire ce que l'utilisateur voulait au moment précis. hehe

+0

Les paramètres GET comme? Style = dark sont envoyés au serveur mais l'attribut rel ne l'est pas, donc utiliser les paramètres GET est préférable, j'essaie juste d'éviter d'avoir à les ajouter à tous les liens. – Jake

+0

Avec 'rel', je voulais dire que javascript envoie ensuite la variable. – jolt

0

Je suis sûr que vous pouvez utiliser une session pour ce genre de chose, non? La première fois que les valeurs sont fournies via la chaîne de requête, vous les ajoutez à la session et vous les extrayez ensuite de la session.

+0

Le problème vient quand un utilisateur en visite un.com qui intègre mon application avec style = dark puis ouvre two.com dans un nouvel onglet qui utilise style = light. Revenir à l'onglet avec one.com et en cliquant sur un lien dans mon application va changer le style à la lumière. – Jake

+0

Ajoutez les valeurs à la session, y compris une "clé" fournie par la chaîne de requête. Ainsi, lorsque vous visitez one.com, une chaîne de requête entre dans votre application et la clé est X pour que les valeurs soient stockées pour X. Ensuite, two.com entre dans votre application et la clé est Y, les valeurs sont stockées pour Y, dans le même objet de session. (c'est le même navigateur/utilisateur). Ajoutez ensuite cette clé à chaque lien que vous créez, de sorte que lorsque vous naviguez dans l'onglet, la chaîne de requête définit les valeurs de session à utiliser. La clé identifie l'ensemble de valeurs dans l'objet de session. De cette façon, vous pouvez stocker plusieurs ensembles de valeurs dans un objet de session. – Bazzz

+0

Je pense que votre problème initial réside dans le fait que vous ne voulez pas stocker des charges dans votre chaîne de requête comme "? Style = dark & ​​color = vert & backcolor = blue & size = large" etc. Mais stocker une "clé" me semble faisable. .com? clé = 1234567 "ou peu importe. Ceci est un exemple. La clé n'existe pas dans la session = créer un nouvel ensemble de valeurs. key existe dans session = load-set-set – Bazzz