を示すクライアント上でログインしているユーザー:Login.aspxの、Index.aspxとC#クラス・ファイルは、名前のGlobalData.cs私は3つのページを持っている他のページへ
Googleからのユーザー情報を取得するための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();
}
}
}
今、私は私がOpenIDのを使用するための私のウェブページのためのfacing.Myメカニズムは、ユーザーがログインをクリックしたときにということですよ私の深刻な問題を書いていますボタンをLogin.aspxで実行すると、ユーザーはgoogleから認証された後、ユーザーはGoogleに戻ります。ユーザーはIndex.aspxに戻ってきます。INdex.aspxここで私は自分のDBからユーザーを再認証しました。私のDBには、ユーザーがページを表示する必要があり、電子メールdntがDBに存在する場合、ユーザーはLogin.aspx.Okにリダイレクトする問題は次のとおりです。GoogleとMy Own DBの両方から認証した後、Index.aspxにログインしたときndex.aspx電子メールのフルネームなどの正確な情報を表示Index.aspx.andで、他のブラウザまたはPCまたはセッションからIndex.aspxにログインすると、ユーザーもIndex.aspxにログインしたSuccesfuly.And最初に記録されたインデックス.aspxすると、現在のIndex.aspxページに2番目のログインしたユーザー情報が表示されます。複数のユーザーがIndex.aspxにログインしようとすると、Index.aspx上の各更新時にIndexへの最後のユーザーログインの情報が表示されます。 aspx on Index.aspx.Can誰にでも教えてください私が正確に何を忘れているのかこの問題がなぜ表示されているのですか?私はすべてのコードをすべてのページに入れてくださいコードに追加したりコードから取り除かなければならないものを手伝ってください
なぜ静的フィールドを最初に使用していますか? Webアプリケーションを開発する場合(基本的な技術に関係なく)、ここで説明するような醜いバグを防ぐために、関連するすべてのユーザをそれぞれのセッションに保存する必要があります。静的フィールドには、ウェブサーバが古いプロセスを再利用するのではなく、新しいプロセスを開始することを決定したときに、削除の可能性があるという欠点もあります(たとえば、古いプロセスをシャットダウンした後など)。 – Nuffin
少しASP.NETセッション変数にしてみてください?将来的にはもっと問題があれば助けてくれるのはうれしいですが、それは私があなたのためにあなたの仕事をすることを意味するものではありません(また、ASP.NETを書き続けたい場合は、同時マルチユーザアクセスが可能でなければならないアプリ)。 – Nuffin
セッション変数は、セッションが開始されたとき、つまりセッションを開始したときにのみ有効です。つまり、ユーザーがログインしたときです。以前に使用したのと同じグローバル変数から実際に使用する直前に初期化するので、変更はありません。 – Nuffin