How to persist anon user selection (ex: theme selection)

后端 未结 1 1976
终归单人心
终归单人心 2020-12-20 07:43

Sorry for the ambiguous question but here I go.

On each page a have a partial view displaying different theme options. These themes are just different css classes fo

相关标签:
1条回答
  • 2020-12-20 08:25

    You could use a concept known as Profile

    With profiles you can declare the properties you would like to expose to your users and this works for anonymous users

    Basically the profile properties are stored in cookies, therefore you can configure when they should expire and other cookies-related settings

    Your profile properties are compiled as part of the top-level items compilation - AKA Compilation Life-Cycle in ASP.Net, therefore they will be exposed as strongly-typed properties through the Profile class

    For example:

    Web.config settings

    <configuration>
      <system.web>
        <anonymousIdentification enabled="true"/>
        <profile defaultProvider="AspNetSqlProfileProvider" enabled="true">
          <properties>
            <add name="FirstName"/>
            <add name="LastName"/>
            <add allowAnonymous="true" name="LastVisit" type="System.Nullable`1[System.DateTime]"/>
            <group name="Address">
              <add name="Street"/>
              <add name="PC"/>
              <add name="InternalNumber" type="System.Int32" defaultValue="0"/>
            </group>
            <add name="EmployeeInfo" serializeAs="Binary" type="EmployeeInfo"/>
          </properties>
        </profile>
      </system.web>
    </configuration>
    

    Consuming the profile in code (Global.asax for this example)

    void Application_EndRequest(object sender, EventArgs e)
    {
        if (Profile != null)
        {
            Profile.LastVisit = DateTime.Now;
            Profile.Save();
        }
    }
    

    Additionally, ASP.Net lets you access the properties in JavaScript, using Microsoft AJAX components:

    Web.config

    <configuration>
      <system.web.extensions>
        <scripting>
          <webServices>
            <profileService enabled="true" readAccessProperties="LastVisit" writeAccessProperties="LastVisit"/>
            <jsonSerialization maxJsonLength="102400" recursionLimit="100" />
          </webServices>
        </scripting>
      </system.web.extensions>
    </configuration>
    

    ASPX

    <script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#profile").click(function () {
                Sys.Services.ProfileService.load();
                Sys.Services.ProfileService.properties.LastVisit = new Date();
                Sys.Services.ProfileService.save(
                    null,
                    function (m) {
                        alert(m);
                    },
                    function (e) {
                        alert(e);
                    },
                    null
                );
            });
    
            Sys.Services.ProfileService.load(null, function (r) {
                $("#res").append("<br/>");
                $("#res").append(Sys.Services.ProfileService.properties.LastVisit.toString());
                $("#res").append("<br/>");
            }, function (m) {
                $("#res").append(m.get_message());
            }, null);
    
        });
    </script>
    
    <asp:ScriptManager runat="server" ID="sm">
        <AuthenticationService />
        <ProfileService />
        <RoleService />
    </asp:ScriptManager>
    
    0 讨论(0)
提交回复
热议问题