ปัญหาเซสชัน DotNetOpenAuth ASP.NET MVC 3

ฉันใช้ openid-selector กับ DotNetOpenAuth ในแอป MVC 3 ของฉัน เมื่อใดก็ตามที่ฉันตั้งค่าตัวแปรเซสชันและส่วน DotNetOpenAuth อยู่ใน web.config ตัวแปรเซสชันของฉันจะไม่ติดอยู่หลังจากการเปลี่ยนเส้นทาง

ฉันตรวจสอบตัวแปร Session.SessionID แล้ว และยังคงเหมือนเดิม ดังนั้นฉันจึงอยู่ในเซสชันเดียวกัน (ฉันเชื่อว่า) แต่เมื่อฉันตรวจสอบตัวแปรเซสชัน ฉันเพิ่งตั้งค่าหลังจากการเปลี่ยนเส้นทาง ตัวแปรทั้งหมดจะถูกตั้งค่าเป็นโมฆะ

ฉันไม่เคยเห็นใครที่มีปัญหานี้เลย ฉันสงสัยว่า DotNetOpenAuth ยังไม่พร้อมสำหรับ MVC 3 หรือไม่ ฉันใช้ DotNetOpenAuth เวอร์ชันล่าสุดเช่นกัน

นี่คือส่วนที่เกี่ยวข้องของ web.config หากช่วยได้:

<configSections>
    <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/>
  </configSections>
  <uri>
    <idn enabled="All"/>
    <iriParsing enabled="true"/>
  </uri>
  <system.net>
    <defaultProxy enabled="true"/>
    <settings>
      <servicePointManager checkCertificateRevocationList="true"/>
    </settings>
  </system.net>
  <dotNetOpenAuth>
    <openid>
      <relyingParty>
        <security requireSsl="false"/>
        <behaviors>
          <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth"/>
        </behaviors>
      </relyingParty>
    </openid>
    <messaging>
      <untrustedWebRequest>
        <whitelistHosts>
          <add name="localhost"/>
        </whitelistHosts>
      </untrustedWebRequest>
    </messaging>
    <reporting enabled="true"/>
  </dotNetOpenAuth>

อัปเดต:

มันเกิดขึ้นบนเซิร์ฟเวอร์การพัฒนาของฉัน ทั้งใน IIS หรือเมื่อฉันรันเซิร์ฟเวอร์การพัฒนา ASP.NET

นอกจากนี้ ฉันได้ลองใช้เซสชันทั้งระหว่างดำเนินการและนอกกระบวนการโดยใช้เซิร์ฟเวอร์สถานะ และมันก็ไม่ได้สร้างความแตกต่าง

เกี่ยวกับเซสชันใหม่ ฉันได้ตรวจสอบเหตุการณ์ session_start แล้ว และไม่ได้ถูกเรียก ฉันยังตรวจสอบ Session.IsNewSession และนั่นก็ส่งคืนเท็จเช่นกัน ดังนั้นมีบางอย่างสุ่ม (หรืออาจจะไม่สุ่ม) กำลังลบตัวแปรเซสชันของฉัน!


person Darye    schedule 01.02.2011    source แหล่งที่มา


คำตอบ (4)


ไม่ใช่คำตอบที่ดีที่สุด แต่ฉันคิดว่ามันเป็น response.redirect ที่กำลังฆ่าตัวแปรเซสชันด้วยเหตุผลบางประการ

ดังนั้นฉันจึงทำให้มันเปลี่ยนเส้นทางจาวาสคริปต์แทน เซสชันยังคงอยู่ ทุกอย่างทำงานได้ดี ยังไม่รู้จริงๆ ว่าปัญหาที่แท้จริงคืออะไรที่นี่ แต่เดี๋ยวก่อน ฉันมีเวลาทั้งวันในการหาคำตอบ

person Darye    schedule 01.02.2011
comment
ระวังการเปลี่ยนเส้นทางแบบโฮมสปัน DotNetOpenAuth สามารถใช้การเปลี่ยนเส้นทาง 301 หรือการเปลี่ยนเส้นทางจาวาสคริปต์เองตามขนาดของเพย์โหลดข้อความ หากคุณทำสิ่งนี้ด้วยตัวเอง หวังว่าโค้ดของคุณจะมีความยืดหยุ่นเมื่อเผชิญกับความหลากหลายที่คุณอาจได้รับจาก DotNetOpenAuth - person Andrew Arnott; 02.02.2011
comment
ฉันประสบปัญหาเดียวกันนี้หลังจากการเรียกกลับ Twitter oAuth ฉันจะลองเปลี่ยนเส้นทางจาวาสคริปต์และดูว่าได้ผลหรือไม่ - person jeremcc; 25.05.2011

พบปัญหาที่นี่ (นานมาแล้วตอนนี้) เห็นได้ชัดว่า MVC2 ไม่สนใจว่าฉันจะมองเห็นการกระทำของฉันโดยที่ฉันเพิ่งดำเนินการบางอย่างแล้วเปลี่ยนเส้นทางหรือไม่

อย่างไรก็ตาม เริ่มต้นใน MVC3 หลังจากอัปเกรดแล้ว หากฉันไม่มีมุมมองสำหรับการดำเนินการของฉัน หน้าเว็บจะบันทึกข้อผิดพลาด และเมื่อมีข้อผิดพลาด เฟรมเวิร์กจะไม่จัดเก็บตัวแปรเซสชันที่ฉันเพิ่งตั้งค่า

แก้ไขง่ายๆ... เพิ่มมุมมอง จากนั้นตรวจสอบให้แน่ใจว่าไม่มีข้อผิดพลาดในมุมมอง

person Darye    schedule 17.07.2013

สิ่งนี้ควรจะได้ผล ฉันใช้ DotNetOpenAuth กับ ASP.NET MVC 3 โดยไม่มีปัญหาใด ๆ คุณอาจต้องการตรวจสอบว่าเซสชันของคุณไม่หมดอายุในระหว่างที่ผู้ใช้อยู่บนไซต์ระยะไกลเพื่อตรวจสอบสิทธิ์ การที่คุณได้รับ SessionId เดียวกันไม่ได้หมายความว่าเซสชันนั้นยังไม่หมดอายุ สิ่งนี้อาจเกิดขึ้นได้หากเซิร์ฟเวอร์รีสตาร์ท AppDomain

person Darin Dimitrov    schedule 01.02.2011
comment
ขอบคุณคำตอบ สิ่งนี้คือมันเกิดขึ้นบนเซิร์ฟเวอร์การพัฒนาของฉัน ทั้งใน IIS หรือเมื่อฉันรันเซิร์ฟเวอร์การพัฒนา ASP.NET ไม่เข้าใจว่าเกิดอะไรขึ้น ฉันลบ DotNetOpenAuth ทุกอย่างทำงานได้ ฉันจะหาข้อมูลเพิ่มเติมเพื่อดูว่าเซสชันกำลังรีสตาร์ทหรือไม่ และอะไรเป็นสาเหตุ - person Darye; 01.02.2011

DotNetOpenAuth ไม่มี Session.Abandon หรือ Session.Clear อยู่ในโค้ดเบสเลย ดูเหมือนว่าหากคุณตั้งค่าคุกกี้ หลังจาก การเปลี่ยนเส้นทางได้ถูกส่งไปยังไคลเอ็นต์แล้วว่าคุกกี้เหล่านั้นจะหายไป โดยทั่วไปแล้วตัวแปรเซสชันจะไม่คงอยู่เป็นคุกกี้แยกกัน ดังนั้นหากคุกกี้เซสชันของคุณสร้างมันขึ้นมา (และดูเหมือนว่าจะมี) สถานะที่เหลือของคุณควรอยู่ที่นั่น

การเจาะลึกเรื่องนี้โดยการใช้ที่จัดเก็บเซสชั่นของคุณเองและติดตามสิ่งที่เกิดขึ้นจริงจะเป็นเรื่องน่าสนใจ

person Andrew Arnott    schedule 02.02.2011