2012-01-10 131 views
0

我有三个页面:为Login.aspx,Index.aspx的和C#类文件名为GlobalData.cs登录的用户在客户端显示到其他网页

中的Login.aspx背后的代码从谷歌获取用户信息并显示在Index.aspx的

这里是代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using DotNetOpenAuth.OpenId; 
using DotNetOpenAuth.OpenId.RelyingParty; 
using OpenIdTest; 
using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; 
using System.Web.Security; 
using DotNetOpenAuth.OpenId.Extensions.AttributeExchange; 

public partial class Account_Login : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     FuncOpenID(); 

    } 

    protected void FuncOpenID() 
    { 
     OpenIdRelyingParty OIDRP = new OpenIdRelyingParty(); 
     var response = OIDRP.GetResponse(); 
     if (response != null) 
     { 
      switch (response.Status) 
      { 
       case AuthenticationStatus.Authenticated: 

        var fetchResponse = response.GetExtension<FetchResponse>(); 
        Session["GoogleIdentifier"] = fetchResponse; 
        var Testresponse = Session["GoogleIdentifier"] as FetchResponse; 

        GlobalData.Email = Testresponse.GetAttributeValue(WellKnownAttributes.Contact.Email) ; 
        GlobalData.Name = Testresponse.GetAttributeValue(WellKnownAttributes.Name.First) ; 
        GlobalData.LastName = Testresponse.GetAttributeValue(WellKnownAttributes.Name.Last); 
        FormsAuthentication.RedirectFromLoginPage(GlobalData.Email, false); //(response.ClaimedIdentifier, false); 
        FormsAuthentication.RedirectFromLoginPage(GlobalData.Name, false); 
        FormsAuthentication.RedirectFromLoginPage(GlobalData.LastName, false); 
        break; 
       case AuthenticationStatus.Canceled: 

        break; 
       case AuthenticationStatus.Failed: 

        break; 
      } 
     } 
    } 



    protected void OpenLogin_Click(object src, CommandEventArgs e) 
    { 
     string StrUri = e.CommandArgument.ToString(); 
     OpenIdRelyingParty openid = new OpenIdRelyingParty(); 
     var b = new UriBuilder(Request.Url) { Query = "" }; 

     var req = openid.CreateRequest(StrUri); 

     var fetchRequest = new FetchRequest(); 
     fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 
     fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.First); 
     fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.Last); 

     req.AddExtension(fetchRequest); 

     req.RedirectToProvider(); 

    } 
    protected void btnLoginToGoogle_Click(object sender, EventArgs e) 
    { 

    } 

} 

更新 和类文件后面的代码如下:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 

    namespace OpenIdTest 
    { 
     public class GlobalData 
     { 
      public string Email = ""; 
      public string Name = ""; 
      public string LastName = ""; 
      public string test = ""; 
      public string FullName = ""; 

     } 

而且Index.aspx的后面的代码如下:

namespace OpenIdTest 
{ 

public partial class Rights : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     Session["U_EMAIL"] = GlobalData.Email; 
     Session["U_NAME"] = GlobalData.Name; 
     Session["U_LASTNAME"] = GlobalData.LastName; 


     OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|OID.mdb;Persist Security Info=False;"); 

     con.Open(); 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.CommandText = "Select * from EMAILS WHERE FLAG='Allowed' and EMAIL= '" + GlobalData.Email + "'"; 

     cmd.CommandType = CommandType.Text; 
     cmd.Connection = con; 
     OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 

     foreach (DataRow row in ds.Tables[0].Rows) 
     { 

      String email = row["EMAIL"].ToString(); 
      if (email == null) 
      { 
       Response.Redirect("Login.aspx"); 

      } 
      else 
      { 
       Label2.Text = Session["U_EMAIL"].ToString(); 
       Label1.Text = Session["U_NAME"].ToString(); 
       Label3.Text = Session["U_LASTNAME"].ToString(); 
       Label1.Visible = false; 
       Label3.Visible = false; 
       Label4.Text = Label1.Text + ' ' + Label3.Text; 

      } 

     } 
     con.Close(); 
    } 



} 
} 

现在,我写我的严重的问题,对此我facing.My机制我的网页上使用OpenID的是,当用户点击登录按钮Login.aspx它需要用户谷歌邮件认证后,从谷歌用户回到Index.aspx.And这里INdex.aspx我已经从mY自己的数据库重新认证用户,如果谷歌已经返回的电子邮件存在在我的数据库然后用户应该查看页面,如果电子邮件dnt存在数据库然后用户重定向到Login.aspx.Ok现在的问题是,当我登录到Index.aspx从谷歌和我自己的数据库认证后,我ndex.aspx显示准确的信息,如电子邮件全名等在Index.aspx.and意思是,如果我从任何其他浏览器或PC或会话登录到Index.aspx,然后也用户登录到Index.aspx Succesfuly.And当我刷新第一个记录索引.aspx然后它显示当前Index.aspx page上的第二个登录用户信息。它表示当多个用户尝试登录到Index.aspx时,然后在每次刷新时Index.aspx将上次用户登录的信息显示为Index。 aspx on Index.aspx.Can任何人都可以告诉我我究竟是什么想念这就是为什么这个问题显示。我把所有页面的所有代码请帮助我必须添加代码或从代码中删除

+0

为什么你首先使用静态字段?在开发Web应用程序时(无论基础技术如何),与用户相关的所有内容都应存储在各自的用户会话中,以防止这里描述的丑陋的错误。静态字段的缺点是,当Web服务器决定启动一个新进程而不是重新使用旧进程时(例如关闭旧进程之后不会被访问)时,可能会删除。 – Nuffin 2012-01-10 13:28:29

+0

为什么你不看一点点到ASP.NET会话变量和尝试自己?如果将来出现更多问题,我很乐意提供帮助,但这并不意味着我会为您做好工作(并且您必须以任何方式学习,如果您想继续编写ASP.NET需要能够同时进行多用户访问的应用程序)。 – Nuffin 2012-01-10 13:52:58

+0

会话变量只有在会话开始时设置它们时才有用,换句话说:一旦用户登录。由于您在从之前使用的相同全局变量实际使用它们之前初始化它们,因此没有任何更改。 – Nuffin 2012-01-11 08:01:42

回答

2

存储在一个用户级别永远不能存储在一个静态的。静态属性本质上意味着只有一个用户会登录到您的网站,并且它将成为最后登录人员的信息。更改您的代码以将这些值存储在会话中,然后此问题将消失。

编辑:这很难说,这是怎么回事,但是这仍然看起来像一个静态的,所以你需要替换此:

GlobalData.Email = Testresponse.GetAttributeValue(WellKnownAttributes.Contact.Email) ; 
GlobalData.Name = Testresponse.GetAttributeValue(WellKnownAttributes.Name.First) ; 
GlobalData.LastName = Testresponse.GetAttributeValue(WellKnownAttributes.Name.Last); 

有了这个:

Session["U_Email"] = Testresponse.GetAttributeValue(WellKnownAttributes.Contact.Email) ; 
Session["U_Name"] = Testresponse.GetAttributeValue(WellKnownAttributes.Name.First) ; 
Session["U_LastName"] = Testresponse.GetAttributeValue(WellKnownAttributes.Name.Last); 

因为再次,你因为它是静态的,所以不能使用GlobalData。

+0

问题描述迫切需要编辑......看起来像他从谷歌翻译并粘贴它,当您发布解决方案时,我处于编辑的中间 – Rafael 2012-01-10 13:47:15

+0

任何ONe都可以告诉我何人以及在哪里使用会话变量进行解析我的PRoblem – 2012-01-11 03:51:31

+0

AnyOne请检查我的更新我已经删除静态从类和使用的会话变量来存储用户信息但情况是相同的 – 2012-01-11 04:47:44