subdominios google code asp.net cookies subdomain iis-8

asp.net - code - google analytics id



Cómo compartir cookies entre dominio y subdominio, pero no otros subdominios (3)

Puede evitar este problema redirigiendo su dominio no www a www con el módulo UrlRewrite en> IIS7

reescribir la regla para poner en web.config

<system.webServer> <rewrite> <rules> <rule name="Redirect to WWW" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^example.com$" /> </conditions> <action type="Redirect" url="http://www.example.com/{R:0}" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer>

Nuestra aplicación web ASP.NET MVC tiene algunos subdominios diferentes que usamos para pruebas y código heredado. Los subdominios son:

  1. www.sitename.com (sitio de producción)
  2. test.sitename.com (prueba)
  3. original.sitename.com (código heredado)
  4. staging.sitename.com (ocasionalmente utilizado para realizar pruebas justo antes de una implementación)

A propósito, tenemos la autenticación de formularios que no usa cookies de nivel de dominio porque queremos que las cookies sean únicas en estos diferentes subdominios. El problema es que cuando las personas obtienen un enlace al dominio raíz (sitename.com), les exige iniciar sesión de nuevo para obtener una cookie, aunque ya hayan iniciado sesión en www.sitename.com.

¿Hay alguna manera de compartir la cookie entre solo www.sitename.com y sitename.com sin que los otros subdominios se vean afectados?


Recomiendo forzar el uso de www. versión del sitio, por este motivo, entre otros, este sitio tiene excelentes razones por las que ...

http://www.yes-www.org/why-use-www/

Para hacer esto en .net, puede agregar lo siguiente a su web.config

<system.webServer> <rewrite> <rules> <rule name="Redirect to www" stopProcessing="true"> <match url="(.*)" /> <conditions trackAllCaptures="false"> <add input="{HTTP_HOST}" pattern="^sitename.com$" /> </conditions> <action type="Redirect" url="{MapProtocol:{HTTPS}}://www.{HTTP_HOST}{HTTP_URL}" redirectType="Permanent"/> </rule> </rules> <rewriteMaps> <rewriteMap name="MapProtocol"> <add key="on" value="https" /> <add key="off" value="http" /> </rewriteMap> </rewriteMaps> </rewrite> </system.webServer>

Esto redireccionará automáticamente de forma permanente (consulte la adición de redirectType = "Permanente") para las URL que no sean www al equivalente de www y conservará el protocolo http (s)

La parte trackAllCaptures está relacionada con la coincidencia del patrón de expresión regular; en nuestro caso, no es necesario que capturemos nada, solo tenemos que hacer coincidir la regla, por lo que podemos dejarla como falsa.

El patrón de expresión regular ^ sitename.com $ coincidirá cuando el nombre de host coincida exactamente con "sitename.com" - el ^ significa la posición de inicio y el $ significa la posición final

El mapa de reescritura proviene de una idea de Jeff Graves, creo, http://jeffgraves.me/2012/11/06/maintain-protocol-in-url-rewrite-rules/

La forma en que he mostrado muestra solo una forma de hacerlo, como con la mayoría de las cosas: hay muchas maneras de lograr esto.

Scott Forsyth tiene un artículo sobre diferentes formas de lograr esto (también hace referencia a Jeff Graves) http://weblogs.asp.net/owscott/url-rewrite-protocol-http-https-in-the-action


Puedes usar algo como

sessionCookie.Domain = ".yourdomain.com" ;

entonces podrá solicitar las mismas cookies de cualquier subdominio y editarlas si lo desea.