Microsoft KB Archive/323752

= Session variables are lost if you use FRAMESET in Internet Explorer 6 =

Article ID: 323752

Article Last Modified on 4/21/2006

-

APPLIES TO


 * Microsoft Internet Explorer (Programming)

-



This article was previously published under Q323752



SYMPTOMS
If you implement a FRAMESET whose FRAMEs point to other Web sites on the networks of your partners or inside your network, but you use different top-level domain names, you may notice in Internet Explorer 6 that any cookies you try to set in those FRAMEs appear to be lost. This is most frequently experienced as a loss of session state in an Active Server Pages (ASP) or ASP.NET Web application. You try to access a variable in the Session object that you expect to exist, and a blank string is returned instead.

You also see this problem in a FRAMEs context if your Web pages alternate between the use of Domain Name System (DNS) names and the use of Internet Protocol (IP) addresses.



CAUSE
Internet Explorer 6 introduced support for the Platform for Privacy Preferences (P3P) Project. The P3P standard notes that if a FRAMESET or a parent window references another site inside a FRAME or inside a child window, the child site is considered third party content. Internet Explorer, which uses the default privacy setting of Medium, silently rejects cookies sent from third party sites.



RESOLUTION
You can add a P3P compact policy header to your child content, and you can declare that no malicious actions are performed with the data of the user. If Internet Explorer detects a satisfactory policy, then Internet Explorer permits the cookie to be set.

Visit the following MSDN Web site for a complete list of satisfactory and unsatisfactory policy codes:

Privacy in Internet Explorer 6

http://msdn.microsoft.com/workshop/security/privacy/overview/privacyie6.asp

A simple compact policy that fulfills this criteria follows:

P3P: CP=&quot;CAO PSA OUR&quot; This code sample shows that your site provides you access to your own contact information (CAO), that any analyzed data is only &quot;pseudo-analyzed&quot;, which means that the data is connected to your online persona and not to your physical identity (PSA), and that your data is not supplied to any outside agencies for those agencies to use (OUR).

You can set this header if you use the Response.AddHeader method in an ASP page. In ASP.NET, you can use the Response.AppendHeader method. You can use the IIS Management Snap-In (inetmgr) to add to a static file.

Follow these steps to add this header to a static file:
 * 1) Click Start, click Run, and then type inetmgr.
 * 2) In the left navigation page, click the appropriate file or directory in your Web site to which you want to add the header, right-click the file, and then click Properties.
 * 3) Click the HTTP Headers tab.
 * 4) In the Custom HTTP Headers group box, click Add.
 * 5) Type P3P for the header name, and then for the compact policy string, type CP=..., where &quot;...&quot; is the appropriate code for your compact policy.

Alternatively, Internet Explorer users can modify their privacy settings so that they are prompted to accept third party content. The following steps show how to modify the privacy settings:
 * 1) Run Internet Explorer.
 * 2) Click Tools, and then click Internet Options.
 * 3) Click the Privacy tab, and then click Advanced.
 * 4) Click to select the Override automatic cookie handling check box.
 * 5) To allow ASP and ASP.NET session cookies to be set, click to select the Always allow session cookies check box.
 * 6) To receive a prompt for any type of third party cookie, click Prompt in the Third-party Cookies list.



STATUS
This behavior is by design.



Steps to reproduce the behavior
 Create a file name TestFrameset.asp.  Point one of the FRAMEs of the file to another computer on your network, by means of IP addresses: 

   </FRAMESET>

</HTML> </li>  On the remote computer, create TestFrame.asp like the following example: <HTML>

<BODY>

<%

Response.write &quot;Session var is &quot; & Session(&quot;TestVar&quot;) Session(&quot;TestVar&quot;) = &quot;Hello, world!&quot;

%>

<BODY>

<FORM METHOD=&quot;POST&quot;> <INPUT type=&quot;submit&quot; value=&quot;Print TestVar&quot;> </FORM>

</BODY>

</HTML> </li> Move to TestFrameset.asp, and then click Form Submission.</li></ol>

Notice after the submission that Session(&quot;TestVar&quot;) entry prints as empty, although it should contain &quot;Hello, world!&quot;.

<div class="references_section">