Avatar billede omansf Nybegynder
09. december 2005 - 15:07 Der er 9 kommentarer og
1 løsning

Session objekt mellem to sites

Hejsa
Jeg har en hjemmeside på en webserver www.a.dk. I den hjemmeside har jeg et iframe. I dette iframe hentes der et login komponent fra en anden webserver www.b.dk
Dette login komponent tager et brugernavn og password og herefter kan det sendes til serveren til validering. Hvis brugeren er kendt skal indholdet i min iframe fra www.b.dk nu lukke op for den web applikation i et nyt vindue (popup). Eneste problem er at webapplikationen ikke ser ud til at kende mit brugernavn og login. Kalder jeg login komponenten på www.b.dk direkte i et browser vindue går alting som det skal.. Dette virker også som før beskrevet hvis www.a.dk linker til web applikationen på localhost.
Mit spørgsmål er: Hvor bliver min session af når jeg bruger rigtige www servere kontra localhost?
Avatar billede innercitydk Nybegynder
09. december 2005 - 15:18 #1
Det er ikke muligt at overføre sessions mellem domæner. Det skal være imellem sider på ét domæne. Jeg kan da hurtigt fikse et login script til dig..
Avatar billede innercitydk Nybegynder
09. december 2005 - 15:22 #2
Selve login siden:

<%@ Control Language="c#" %>
<%@ Import Namespace="System.Data.Odbc" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="config" %>
<div align="left">
<table width="150"  border="0" cellpadding="10" class="mods">
  <tr>
    <td>
<script language="c#" runat="server">
void Page_Load(object sender, EventArgs e)
{
if(Session["bruger"]!=null)
    {
        Label3.Text="Logget på som:";
        Label4.Text=Session["bruger"].ToString();
        Button1.Enabled=false;
    }
}
void Button1_Click(object sender, EventArgs e)
{
    clearfejl();
    if(user.Text=="")
    {
        fejlbrugernavn.Text="Skal udfyldes";
    }
    if(passw.Text=="")
    {
        fejlpassword.Text="Skal udfyldes";
    }
    if(user.Text!="" & passw.Text!="")
    {
    clearfejl();
   
    string resultat;
    string resultat2;

    resultat="";
    resultat2="";

    OdbcConnection myConn;
            string strDSN = settings.hentdbplacering();
            myConn = new OdbcConnection(strDSN);

            OdbcDataAdapter myAdapter = new OdbcDataAdapter("select navn,pass from brugere where email='"+user.Text+"'", myConn );
            DataSet ds = new DataSet();
            myAdapter.Fill (ds, "brugere" );
            foreach(DataRow dr in ds.Tables[0].Rows)
            {   
                resultat = dr["pass"].ToString();
                resultat2 = dr["navn"].ToString();                   

            }   
   
    if(resultat==passw.Text)
    {
       
        Session["bruger"] = user.Text;
        Label3.Text="Logget på som:";
        Label4.Text=Session["bruger"].ToString();
        Button1.Enabled=false;
        clearfelter();
        clearfejl();
        Response.Redirect("default.aspx");
    }
    else if(resultat=="")
    {
        clearfelter();
        clearfejl();
        fejlbrugernavn.Text="Eksisterer ikke!";
    }
    else
    {
        clearfejl();
        passw.Text="";
        fejlpassword.Text="Fejl i password!";       
    }
    }
}
public void logud(object sender, EventArgs e)
    {
        clearfelter();
        clearfejl();
        if(Session["bruger"] != null)
        {
            Session.Abandon();
            Response.Redirect("default.aspx");
        }
        else
        {
            Label3.Text="Du er ikke logget ind!";
        }
    }
public void clearfelter()
{
        user.Text="";
        passw.Text="";
}
public void clearfejl()
{
        fejlbrugernavn.Text="";
        fejlpassword.Text="";
}   
</script>
<form id="Form1" method="post" runat="server">

            <br>&nbsp;&nbsp;&nbsp;<asp:Label id="Label1" runat="server" Height="27px">Brugernavn(email):</asp:Label><br>
                &nbsp;&nbsp;&nbsp;<asp:TextBox id="user" runat="server" Width="104px"></asp:TextBox><br>
                &nbsp;&nbsp;&nbsp;<asp:Label ID="fejlbrugernavn" runat="server" ForeColor="#FF0000" Font-Size="7" /><br>
           
            &nbsp;&nbsp;&nbsp;<asp:Label id="Label2" runat="server" Height="27px">Password:</asp:Label><br>
            &nbsp;&nbsp;&nbsp;<asp:TextBox id="passw" TextMode="Password" runat="server" Width="104px"></asp:TextBox><br>
                &nbsp;&nbsp;&nbsp;<asp:Label ID="fejlpassword" runat="server" ForeColor="#FF0000" Font-Size="7" /><br>
           
            &nbsp;&nbsp;&nbsp;<asp:Button id="Button1" OnClick="Button1_Click"  runat="server" Text="Log ind" Font-Size="8"></asp:Button>
            <asp:Button runat="server" id="LogUd" Text="Log ud" Font-Size="8" OnClick="logud"/><br>
&nbsp;&nbsp;&nbsp;&nbsp;<asp:Label ID="Label3" runat="server" Height="27px"><a href="login_gp.aspx" class="tekstsmall">Glemt password?</a></asp:Label>
&nbsp;&nbsp;&nbsp;&nbsp;<asp:Label ID="Label4" runat="server" Height="27px" ForeColor="#FF9933"></asp:Label>
</form>
      </td>
  </tr>
</table>
</div>


Tjek for session på de sider du vil have sikret:

<script language="c#" runat="server">
void Page_Load(object sender, EventArgs e)
{
if(Session["bruger"]!=null)
{
    ;
}
else
{
    Response.Redirect("login.aspx");
}

}
</script>

Vh
Avatar billede innercitydk Nybegynder
09. december 2005 - 15:22 #3
du skal lige tilpasse det men det virker upåklageligt.. jeg bruger det selv her http://aspdotnet.dk (under udvikling)
Avatar billede innercitydk Nybegynder
09. december 2005 - 15:23 #4
Glemt password kan du lave således:

<%@ Control Language="c#" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Web.Mail" %>
<%@ Import Namespace="config" %>
<div align="left">
<table width="300"  border="0" cellpadding="10" class="glemt">
  <tr>
    <td>
<script language="c#" runat="server">
void Button1_Click(object sender, EventArgs e)
{
    clearfejl();
    if(TextBox1.Text=="")
    {
        fejlbrugernavn.Text="Skal udfyldes";
    }
   
    if(TextBox1.Text!="")
    {
    clearfejl();
    string resultat;
    resultat="";
    SqlConnection myConn;
    string strDSN = settings.hentdbplacering();
    myConn = new SqlConnection(strDSN);

    SqlDataAdapter myAdapter = new SqlDataAdapter("select pass from brugere where email='"+TextBox1.Text+"'", myConn );
    DataSet ds = new DataSet();
    myAdapter.Fill (ds, "brugere" );
    foreach(DataRow dr in ds.Tables[0].Rows)
    {   
        resultat = dr["pass"].ToString();               
    }   
   
    if(resultat=="")
    {
        clearfelter();
        clearfejl();
        fejlbrugernavn.Text="Eksisterer ikke!";
    }
    else
    {
   
        MailMessage mail = new MailMessage();
        mail.To = ""+TextBox1.Text;
        mail.From = "admin@aspdotnet.dk";
        mail.Subject = "Password til aspdotnet.dk";
        mail.Body = "Dit Password er: "+resultat; //"this is my test email body."
        SmtpMail.SmtpServer = "localhost";
        try
        {
        SmtpMail.Send( mail );
        clearfejl();
        TextBox1.Text="";
        fejlbrugernavn.Text="Gennemført!";
        Button1.Enabled=false;
        }
        catch
        {
            fejlbrugernavn.Text="Kan ikke sende!";
        }
    }
    }
}

public void clearfelter()
{
        TextBox1.Text="";
}
public void clearfejl()
{
        fejlbrugernavn.Text="";
}   
</script>
<form id="Form1" method="post" runat="server">
            <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <asp:Label id="Label1" runat="server" Height="27px" ForeColor="#FFFFFF"></asp:Label><br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <asp:TextBox id="TextBox1" runat="server" Width="200px"></asp:TextBox><br>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <asp:Label ID="fejlbrugernavn" runat="server" ForeColor="#FF0000" Font-Size="7" />
            <br>
           
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <asp:Button id="Button1" OnClick="Button1_Click"  runat="server" Text="Send password" Font-Size="8" Width="160"></asp:Button>
            <br>
               
        </form>
      </td>
  </tr>
</table>
</div>
Avatar billede innercitydk Nybegynder
09. december 2005 - 15:25 #5
Koden oovenfor er fra login_gp.aspx
Avatar billede omansf Nybegynder
09. december 2005 - 15:33 #6
Jeg prøver det af - men det er som der står i den første besvarelse nok det der stopper legen - forstår bare ikke hvorfor det så virker når jeg bruger localhost til at køre login siden...
Avatar billede jokkejensen Novice
09. december 2005 - 15:47 #7
Alternativt, gemmer du sessionID i en DB på begge servere, så kan du bruge det gennem querystrengen...

Altså gemme SessionID ved Session_Start i begge database, smide sessionID med i querystrengen til iframen, tjek om den eksisterer i DB, hvis den gør -> ja så er man jo logget ind...

husk at slette de "gemte" sessionID i Session_end
Avatar billede innercitydk Nybegynder
09. december 2005 - 15:54 #8
jeg smider lige et svar du kan altid afvise hvis du ikke kan bruge koden :P

Vh
Avatar billede innercitydk Nybegynder
09. december 2005 - 16:41 #9
svar :D
Avatar billede innercitydk Nybegynder
10. december 2005 - 02:25 #10
?!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester