বেসিক প্রমাণীকরণ ব্যবহার করে কীভাবে ওয়েব সাইট থেকে ব্যবহারকারী লগ আউট করবেন?


279

ব্যবহারকারী যদি মৌলিক প্রমাণীকরণ ব্যবহার করে তবে কোনও ওয়েবসাইট থেকে লগ আউট করা সম্ভব?

হত্যার অধিবেশন যথেষ্ট নয়, যেহেতু একবার ব্যবহারকারী প্রমাণিত হয়ে গেলে, প্রতিটি অনুরোধে লগইন সম্পর্কিত তথ্য থাকে, সুতরাং ব্যবহারকারী পরবর্তী সময় একই পরিচয়পত্র ব্যবহার করে স্বয়ংক্রিয়ভাবে লগইন হয়।

এখন পর্যন্ত একমাত্র সমাধান ব্রাউজারটি বন্ধ করা, তবে এটি ব্যবহারের দিক থেকে গ্রহণযোগ্য নয়।


1
উৎসুক. আপনি কেন এটা করতে চান?
ডেকে

17
একটি পৃথক ব্যবহারকারী হিসাবে লগ ইন করতে সক্ষম হতে।
মার্কো

16
@ ডোক - এটি একটি আদর্শ সামাজিক-হ্যাকিং জিনিস: ব্যবহারকারীদের তাদের ব্রাউজারটি খোলা রেখে লগ আউট করতে সক্ষম হওয়া উচিত। মনে করুন আপনার ব্যবহারকারীর মধ্যে একটি পাবলিক মেশিনে সাইট অ্যাক্সেস করেছে? তাদের স্পষ্টভাবে লগ-অফ করতে হবে যাতে পরবর্তী ব্যবহারকারী তাদের মতো সাইটে অ্যাক্সেস করতে না পারে।
কিথ

@ ডক এমন একটি সমস্যাও রয়েছে যা ব্যবহারকারীর পক্ষে সাইটের লগআউট করা অসম্ভব করে তোলে। সার্ভার অনুমোদন কুকি, এমনকি সেশন কুকি সাফ করতে পারে। ব্রাউজারটি /পৃষ্ঠাটি লোড করতে গেলে সেগুলি স্বয়ংক্রিয়ভাবে আবার লগ ইন হয়ে যায়।
ইয়ান বয়ড

লগআউট করার জন্য একটি নকল অনুরোধ প্রেরণকারী পদ্ধতিটি আমি ব্যবহার করছি, তবে এটি গ্রাহককে লক করে দেয় যেহেতু একটি স্ট্রিম সীমাবদ্ধতা রয়েছে যে AD এ 3 বার লগইন ব্যর্থ হয়েছিল। সুতরাং, সাবধানতার সাথে এই পদ্ধতিটি (একটি জাল অনুরোধ প্রেরণ করুন) ব্যবহার করার পরামর্শ দিন।
কিয়ানচাও প্যান

উত্তর:


170

বেসিক প্রমাণীকরণ লগ আউট পরিচালনা করার জন্য ডিজাইন করা হয়নি। আপনি এটি করতে পারেন, তবে সম্পূর্ণ স্বয়ংক্রিয়ভাবে নয়।

আপনাকে যা করতে হবে তা হ'ল ব্যবহারকারী একটি লগআউট লিঙ্কটি ক্লিক করুন এবং একই ক্ষেত্রটি ব্যবহার করে এবং 4040 হিসাবে আপনি লগইন করার জন্য অনুরোধ করেছেন এমন সাধারণ ইউআরএল ফোল্ডার পর্যায়ে প্রতিক্রিয়া হিসাবে একটি '401 অননুমোদিত' প্রেরণ করুন।

তাদের অবশ্যই পরবর্তী শংসাপত্রগুলি ইনপুট করার জন্য নির্দেশিত হতে হবে, যেমন। একটি ফাঁকা ব্যবহারকারীর নাম এবং পাসওয়ার্ড, এবং প্রতিক্রিয়া হিসাবে আপনি একটি "আপনি সফলভাবে লগ আউট করেছেন" পৃষ্ঠাটি ফেরত পাঠান। ভুল / ফাঁকা শংসাপত্রগুলি এরপরে পূর্ববর্তী সঠিক শংসাপত্রগুলি ওভাররাইট করে।

সংক্ষেপে, লগআউট স্ক্রিপ্টটি লগইন স্ক্রিপ্টের যুক্তিকে বিপরীত করে, কেবলমাত্র ব্যবহারকারী যদি সঠিক শংসাপত্রগুলি পাস না করে তবে সাফল্য পৃষ্ঠাটি ফিরিয়ে দেয় ।

প্রশ্নটি হ'ল কিছুটা কৌতূহলী "আপনার পাসওয়ার্ড প্রবেশ করান না" পাসওয়ার্ড বাক্স ব্যবহারকারীর গ্রহণযোগ্যতার সাথে মিলবে। পাসওয়ার্ড পরিচালকদের যে পাসওয়ার্ডটি স্বয়ংক্রিয়ভাবে পূরণ করার চেষ্টা করে তারাও এখানে যেতে পারে।

মন্তব্যের জবাবে যুক্ত করতে সম্পাদনা করুন: পুনরায় লগ-ইন করা কিছুটা আলাদা সমস্যা (যদি না আপনার দ্বি-পদক্ষেপের লগআউট / লগইন স্পষ্টত প্রয়োজন হয়)। দ্বিতীয়টি গ্রহণ করার পরিবর্তে আপনাকে (401) পুনরায় লগইন অ্যাক্সেসের প্রথম প্রয়াসকে প্রত্যাখ্যান করতে হবে (যার সম্ভবত পৃথক ব্যবহারকারীর নাম / পাসওয়ার্ড রয়েছে)। এটি করার কয়েকটি উপায় রয়েছে। লগআউট লিঙ্কে বর্তমান ব্যবহারকারীর নাম অন্তর্ভুক্ত করা হবে (যেমন। / পুনরায় লগিন? ব্যবহারকারীর নাম), এবং যখন শংসাপত্রগুলি ব্যবহারকারীর নামটির সাথে মেলে।


2
আমি এই পদ্ধতির চেষ্টা করব। লগআউট পয়েন্ট (এই ক্ষেত্রে) ব্যবহারকারীকে বিভিন্ন ব্যবহারকারী হিসাবে লগ ইন করতে সক্ষম করা হয়, সুতরাং এটি পুরোপুরি গ্রহণযোগ্য সমাধান। স্বতঃপূর্ণ পাসওয়ার্ড হিসাবে, এটি ব্যবহারকারীর উপর নির্ভর করে যদি তিনি এটি ব্যবহার করেন বা না করেন। ধন্যবাদ
মার্কো

এটি কি এখনও একমাত্র উপায়? আমি একটি এএসপি. নেট এমভিসি এবং জিকুয়েরি বাস্তবায়ন করেছি যা কাজ করে তবে আমি এখনও এতে সন্তুষ্ট নই: stackoverflow.com/questions/6277919
কীথ

@ কীথ: এখনও কেবল এটি এবং সিস্টেম প্যাসের উত্তর (যা সমস্ত ব্রাউজারে কাজ করে না, কাজ করার সময় ম্যানুয়াল পদ্ধতির চেয়ে মসৃণ হয়)।
ববিনস

16
ডাব্লু 3 সি এইচটিএমএল স্পেকটিতে সক্রিয় রয়েছে। তবে এইচটিটিপি অনুমানটি হ্রাস পাচ্ছে। ডাব্লু 3 সি এর প্রায় দুই দশক আগে এই সমস্যাটি সমাধান করা উচিত ছিল। আরইএসটি পরিষেবাদির ব্যবহার বৃদ্ধির সাথে সাথে একটি শক্তিশালী দেশীয় প্রমাণীকরণ পদ্ধতিটি এখন সময়ের প্রয়োজন।
দোজো

9
লোকালহোস্টে ক্রোম 46 ব্রাউজিংয়ে এটি সঠিকভাবে কাজ করতে দেখা যাচ্ছে না। আপনার নির্দিষ্ট করা পুরানো (সঠিক) পাসওয়ার্ড এবং নতুন পাসওয়ার্ড উভয়ই রাখার জন্য Chrome উপস্থিত রয়েছে appears লগআউট পৃষ্ঠায় নেভিগেট করার পরে, ক্রোম সঠিকভাবে নতুন পাসওয়ার্ড ব্যবহার করে এটি আপনার সাইটের একটি পৃষ্ঠায় একটি 401 সংক্ষিপ্ত বিবরণ জমা দেয় T প্রথম 401 এর পরে, ক্রোম পুরানো (সঠিক) পাসওয়ার্ডে ফিরে আসে। সুতরাং এটি সত্যিই মনে হয় প্রথম স্থানে পাসওয়ার্ড মুছে ফেলেনি।
ভ্যানক্যানটিটি

196

বোবিন্সের উত্তরটি যুক্ত করুন ...

অ্যাজাক্সের সাহায্যে আপনার 'লগআউট' লিঙ্ক / বোতামটি জাভাস্ক্রিপ্ট ফাংশনে ওয়্যারড থাকতে পারে। এই ফাংশনটি কোনও খারাপ ব্যবহারকারী নাম এবং পাসওয়ার্ড সহ XMLHttpRequest প্রেরণ করুন। এটি একটি 401 ফিরে পাওয়া উচিত Then তারপরে ডকুমেন্ট.লোকশনটি প্রাক-লগইন পৃষ্ঠায় ফিরে করুন। এইভাবে, ব্যবহারকারী লগআউট করার সময় অতিরিক্ত লগইন ডায়ালগটি কখনই দেখতে পাবেন না বা খারাপ শংসাপত্রগুলি মনে রাখার দরকার নেই।


12
ভাল হ্যাক, ব্যবহারকারীকে ম্যানুয়ালি খারাপ শংসাপত্রগুলি প্রবেশ করানো সম্ভবত বেশিরভাগ ওয়েবঅ্যাপসের জন্য গ্রহণযোগ্য নয়।
বিলমান

1
কেবলমাত্র নিশ্চিত করুন যে এক্সএমএলএইচটিপিআরকুয়েস্টটি অ্যাসিঙ্ক্রোনাস হিসাবে সেট করা নেই বা আপনি দেখতে পাচ্ছেন যে লগআউট অনুরোধটি সম্পূর্ণ হওয়ার আগেই এর মাধ্যমে পুনঃনির্দেশটি সংঘটিত হবে।
ডেভিডজবি

5
আপনি লগইন জন্য একই কৌশল ব্যবহার করতে পারেন। আপনি সার্ভারের প্রমাণীকরণ পদ্ধতি পরিবর্তন না করেই লগইন ডায়ালগটি কাস্টমাইজ করতে পারেন way এই নিবন্ধটি কিছু ভাল ধারণা দেয়: http://www.peej.co.uk/articles/http-auth-with-html-forms.html
স্টিজন ডি উইট

1
@ ডেভিডজবি যেহেতু সিঙ্ক্রোনাস অনুরোধগুলি এখন অবহিত হিসাবে বিবেচিত হয়েছে, তাই বিকল্প বিকল্প হতে পারে অ্যাসিঙ্ক অনুরোধের কলব্যাকে ব্যবহারকারীকে পুনর্নির্দেশ করা।
হেডেন শিফ

1
ডেভিড: ক্রোম এখন এক্সএইচআরগুলির জন্য এটির অনুমতি দেয় এবং আমি নিশ্চিত করতে পারি যে এটি এখনও ক্রোম ক্যানারিতে কাজ করছে। bugs.chromium.org/p/chromium/issues/detail?id=435547
CpnCrunch

192

ব্যবহারকারীর https: // লগ: out@example.com/- এ একটি লিঙ্কে ক্লিক করুন । এটি অবৈধ শংসাপত্রগুলির সাথে বিদ্যমান শংসাপত্রগুলিকে ওভাররাইট করবে; তাদের লগ আউট।


19
কেন এইটি আরও উপার্জন পাবে না? আমার কাছে একটি সহজ এবং কার্যক্ষম সমাধান হিসাবে মনে হচ্ছে। এই পদ্ধতির সাথে কোনও জ্ঞাত সমস্যা আছে?
অ্যামিবে

35
এটি আর ক্রোমে কাজ করবে না, যা সুরক্ষার কারণে কোনও URL- এ শংসাপত্রগুলি উপেক্ষা করে।
থম

5
এটি আমার জন্য কাজ করেছে :) আমি Chrome সংস্করণ ব্যবহার করছি 32.0.1700.102
আবুতুনি

6
সমস্যা: ক্রোমের 39.0 সংস্করণ ব্যবহার করে, যখন আমি এই পদ্ধতির মাধ্যমে লগআউট লিঙ্কটি ক্লিক করি তখন ক্রোম খারাপ লগইন শংসাপত্রগুলি স্মরণ করে এবং প্রতিটি পৃষ্ঠার লোডে নতুন লগইন শংসাপত্রগুলির জন্য অনুরোধ জানায়, যতক্ষণ না আমি কোনও নির্দিষ্ট লগইন শংসাপত্র ছাড়াই উদাহরণ ডটকম এ যাই না , ক্রোমের স্মৃতি পরিষ্কার করুন।
স্কট

4
হাই, আমি এটি ক্রোমে https এর জন্য ব্যবহার করতে পারি না।
থিয়েনখোই ত্রান

67

আপনি এটি পুরোপুরি জাভাস্ক্রিপ্টে করতে পারেন:

বেসিক অনুমোদন ক্যাশে সাফ করার জন্য আইইয়ের (দীর্ঘ সময়ের জন্য) স্ট্যান্ডার্ড এপিআই রয়েছে:

document.execCommand("ClearAuthenticationCache")

এটি কার্যকর হলে সত্য হওয়া উচিত। অন্যথায় ব্রাউজারে মিথ্যা, অপরিজ্ঞাত বা ব্লক করে দেয়।

নতুন ব্রাউজারগুলি (ডিসেম্বর ২০১২ হিসাবে: ক্রোম, ফায়ারফক্স, সাফারি) "যাদু" আচরণ করে। যদি তারা কোনও বোগাসের অন্যান্য ব্যবহারকারীর সাথে সফল বুনিয়াদি প্রমাণের অনুরোধ দেখতে পান (বলুন logout) তারা শংসাপত্রগুলি ক্যাশে সাফ করে এবং সম্ভবত এটি নতুন বোগাস ব্যবহারকারীর নামের জন্য সেট করে, যা আপনাকে নিশ্চিত করতে হবে যে সামগ্রীটি দেখার জন্য কোনও বৈধ ব্যবহারকারীর নাম নয়।

এর মুল উদাহরণ:

var p = window.location.protocol + '//'
// current location must return 200 OK for this GET
window.location = window.location.href.replace(p, p + 'logout:password@')

উপরোক্ত কাজগুলির একটি "অ্যাসিনক্রোনাস" উপায় হল logoutব্যবহারকারীর নামটি ব্যবহার করে একটি এজেএক্স কল করা । উদাহরণ:

(function(safeLocation){
    var outcome, u, m = "You should be logged out now.";
    // IE has a simple solution for it - API:
    try { outcome = document.execCommand("ClearAuthenticationCache") }catch(e){}
    // Other browsers need a larger solution - AJAX call with special user name - 'logout'.
    if (!outcome) {
        // Let's create an xmlhttp object
        outcome = (function(x){
            if (x) {
                // the reason we use "random" value for password is 
                // that browsers cache requests. changing
                // password effectively behaves like cache-busing.
                x.open("HEAD", safeLocation || location.href, true, "logout", (new Date()).getTime().toString())
                x.send("")
                // x.abort()
                return 1 // this is **speculative** "We are done." 
            } else {
                return
            }
        })(window.XMLHttpRequest ? new window.XMLHttpRequest() : ( window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : u ))
    }
    if (!outcome) {
        m = "Your browser is too old or too weird to support log out functionality. Close all windows and restart the browser."
    }
    alert(m)
    // return !!outcome
})(/*if present URI does not return 200 OK for GET, set some other 200 OK location here*/)

আপনি এটিকে একটি বুকমার্কলেটও বানাতে পারেন:

javascript:(function(c){var a,b="You should be logged out now.";try{a=document.execCommand("ClearAuthenticationCache")}catch(d){}a||((a=window.XMLHttpRequest?new window.XMLHttpRequest:window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):void 0)?(a.open("HEAD",c||location.href,!0,"logout",(new Date).getTime().toString()),a.send(""),a=1):a=void 0);a||(b="Your browser is too old or too weird to support log out functionality. Close all windows and restart the browser.");alert(b)})(/*pass safeLocation here if you need*/);


1
এর জন্য কি logoutব্যবহারকারীর নাম এবং / অথবা লগআউট ইউআরএলটির বিশেষ সার্ভার-সাইড হ্যান্ডলিং দরকার ?
ulidtko

1
@ জুলিদকো না, এটি করা উচিত নয় - সমস্ত হ্যান্ডলিং ক্লায়েন্ট-সাইড। একমাত্র পরিস্থিতি যা বিশেষ হ্যান্ডলিংয়ের প্রয়োজন হবে তা যদি বলা logoutহয় কোনও ব্যবহারকারী যদি উপস্থিত হয় এবং উত্পন্ন পাসওয়ার্ডটি ঘটে থাকে। প্রায় অসম্ভব-বিরল ক্ষেত্রে, ব্যবহারকারীর আইডি এমন একটিতে পরিবর্তন করুন যা আপনার সিস্টেমে বিদ্যমান নেই।
ডেভিডজবি

2
আমি আজ উপরে বুকমার্কলেট ব্যবহার করেছি এবং আমি ভাল কাজ করি।
ডেভিড গ্লেবা

আমি এটি ব্যবহার করেছি এবং এটি ক্রোম এবং এফএফ এর জন্য কাজ করেছে। আমার লগআউট.এফপি পৃষ্ঠায় কেবলমাত্র $ _SSSION সাফ করার জন্য একটি অতিরিক্ত "জিইটি" করতে হয়েছিল।
নগর

2
বুকমার্কলেট এজতেও কাজ করে। কেবল এর সাথে ব্যবহার করুন<a href='javascript:......need*/);'>Logout</a>
এরিক

21

নিম্নলিখিত ফাংশন ফায়ারফক্স 40, ক্রোম 44, অপেরা 31 এবং ইন্টারনেট 11. জন্য কাজ নিশ্চিত করা হয়
Bowser ব্রাউজার সনাক্তকরণের জন্য ব্যবহার করা হয়, jQuery এর আরো ব্যবহার করা হয়।

- SecUrl হ'ল পাসওয়ার্ড সুরক্ষিত একটি অঞ্চল যা থেকে লগ আউট করা যায়।
- redirUrl হ'ল একটি পাসওয়ার্ড সুরক্ষিত অঞ্চল (লগআউট সাফল্য পৃষ্ঠা) এর url।
- আপনি পুনর্নির্দেশ টাইমার (বর্তমানে 200 মিমি) বাড়িয়ে নিতে চান।

function logout(secUrl, redirUrl) {
    if (bowser.msie) {
        document.execCommand('ClearAuthenticationCache', 'false');
    } else if (bowser.gecko) {
        $.ajax({
            async: false,
            url: secUrl,
            type: 'GET',
            username: 'logout'
        });
    } else if (bowser.webkit) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", secUrl, true);
        xmlhttp.setRequestHeader("Authorization", "Basic logout");
        xmlhttp.send();
    } else {
        alert("Logging out automatically is unsupported for " + bowser.name
            + "\nYou must close the browser to log out.");
    }
    setTimeout(function () {
        window.location.href = redirUrl;
    }, 200);
}


এটি সর্বাধিক ব্যাপক উত্তর
বেলিডজ

$.ajaxভেরিয়েন্টটি সিঙ্ক্রোনাস ( async: false) এবং xmlhttpভেরিয়েন্ট অ্যাসিনক্রোনাস ( trueইন open()) হওয়ার কোনও কারণ আছে কি ?
বোয়ি

1
ক্রোম এখন রেন্ডারিং ইঞ্জিন ব্লিংক ব্যবহার করে, তাই আপনাকে এতে পরিবর্তন (bowser.gecko)করতে হবে (bowser.gecko || bowser.blink)
বোয়ি

1
কেন জেকো / পলক ব্যবহার $.ajaxএবং ওয়েবকিট ব্যবহার করে new XMLHttpRequest? গেকো / পলক কি করতে সক্ষম হবে না XMLHttpRequestএবং ওয়েবকিটও কি সক্ষম হতে পারে $.ajax? আমি বিভ্রান্ত
রিমিএনএল

11

এখানে jQuery ব্যবহার করে একটি খুব সাধারণ জাভাস্ক্রিপ্ট উদাহরণ:

function logout(to_url) {
    var out = window.location.href.replace(/:\/\//, '://log:out@');

    jQuery.get(out).error(function() {
        window.location = to_url;
    });
}

এই লগ ব্যবহারকারী তাকে ব্রাউজার লগ-ইন বাক্সটি আবার না দেখিয়ে আউট করে, তারপরে তাকে লগ-আউট পৃষ্ঠাতে পুনর্নির্দেশ করুন


1
window.location = window.location.href.replace (/: \ / \ //, ': // লগ: আউট @');
সেবাসে

10

বেসিক-প্রমাণীকরণের মাধ্যমে এটি সরাসরি সম্ভব নয়।

ব্যবহারকারী ইতিমধ্যে উপস্থাপন করা শংসাপত্রগুলি প্রেরণ বন্ধ করতে ব্রাউজারটিকে বলার জন্য সার্ভারের জন্য এইচটিটিপি নির্দিষ্টকরণের কোনও ব্যবস্থা নেই।

"হ্যাকস" রয়েছে (অন্যান্য উত্তর দেখুন) সাধারণত XMLHttpRequest ব্যবহার করে জোগানো থাকে মূলত সরবরাহিতগুলিকে ওভাররাইট করতে ভুল শংসাপত্র সহ একটি HTTP অনুরোধ প্রেরণ করতে।


12
ধারণায়. অনুশীলন অন্য উত্তর থেকে দেখা যায় হিসাবে অন্যথায় প্রমাণিত।
স্টিজন ডি উইট

2
এবং আপনি অন্যান্য উত্তরগুলি থেকেও দেখতে পাচ্ছেন, নির্ভরযোগ্য, ধারাবাহিক এবং ব্যর্থ-নিরাপদ উপায়ে নয়!
jplandrain

5

এটি আইই / নেটস্কেপ / ক্রোমের জন্য কাজ করছে:

      function ClearAuthentication(LogOffPage) 
  {
     var IsInternetExplorer = false;    

     try
     {
         var agt=navigator.userAgent.toLowerCase();
         if (agt.indexOf("msie") != -1) { IsInternetExplorer = true; }
     }
     catch(e)
     {
         IsInternetExplorer = false;    
     };

     if (IsInternetExplorer) 
     {
        // Logoff Internet Explorer
        document.execCommand("ClearAuthenticationCache");
        window.location = LogOffPage;
     }
     else 
     {
        // Logoff every other browsers
    $.ajax({
         username: 'unknown',
         password: 'WrongPassword',
             url: './cgi-bin/PrimoCgi',
         type: 'GET',
         beforeSend: function(xhr)
                 {
            xhr.setRequestHeader("Authorization", "Basic AAAAAAAAAAAAAAAAAAA=");
         },

                 error: function(err)
                 {
                    window.location = LogOffPage;
             }
    });
     }
  }


  $(document).ready(function () 
  {
      $('#Btn1').click(function () 
      {
         // Call Clear Authentication 
         ClearAuthentication("force_logout.html"); 
      });
  });          

5

এটি আসলে বেশ সহজ।

আপনার ব্রাউজারে কেবল নিম্নলিখিতটি দেখুন এবং ভুল শংসাপত্রগুলি ব্যবহার করুন: http: // ব্যবহারকারীর নাম: password@yourdomain.com

এটি "আপনাকে লগ আউট" করা উচিত।


1
তবে ব্যবহারকারীর একজন সত্যিকারের ব্যবহারকারী হতে হবে, অন্যথায় আমি "401 অননুমোদিত" পেয়েছি, তবে ব্যাক বোতামটি ব্যবহার করে আমি আগের লগড ব্যবহারকারীর কাজ চালিয়ে যেতে সক্ষম হয়েছি। অ্যাবাইস ওয়েব সার্ভার এক্স 1 (
2.11.1

1
সদৃশ উত্তর (উপরে ম্যাথু ওয়েলবারনের দেখুন)
স্কিপি লে গ্র্যান্ড গৌরু

3

আপনার যা দরকার তা হ'ল কিছু লগআউট ইউআরএলটিতে ব্যবহারকারীকে পুনর্নির্দেশ করা এবং 401 Unauthorizedএটিতে ত্রুটি ফেরানো । ত্রুটি পৃষ্ঠায় (যা অবশ্যই মৌলিক প্রমাণ ছাড়াই অ্যাক্সেসযোগ্য হবে) আপনাকে আপনার হোম পৃষ্ঠায় একটি পূর্ণ লিঙ্ক সরবরাহ করতে হবে (স্কিম এবং হোস্টনাম সহ)। ব্যবহারকারী এই লিঙ্কটি ক্লিক করবেন এবং ব্রাউজারটি আবার শংসাপত্রগুলির জন্য জিজ্ঞাসা করবে।

এনগিনেক্সের উদাহরণ:

location /logout {
    return 401;
}

error_page 401 /errors/401.html;

location /errors {
    auth_basic off;
    ssi        on;
    ssi_types  text/html;
    alias /home/user/errors;
}

ত্রুটি পৃষ্ঠা /home/user/errors/401.html:

<!DOCTYPE html>
<p>You're not authorised. <a href="<!--# echo var="scheme" -->://<!--# echo var="host" -->/">Login</a>.</p>

আমি আরো ব্যবহার সুপারিশ করবে http_hostমধ্যে 401.htmlকেবল পরিবর্তে host, যেমন সাবেক এছাড়াও পোর্ট নম্বর (কেস একটি অ-মানক পোর্ট ব্যবহার করা হচ্ছে) যোগ
এমিল Koutanov

2
function logout() {
  var userAgent = navigator.userAgent.toLowerCase();

  if (userAgent.indexOf("msie") != -1) {
    document.execCommand("ClearAuthenticationCache", false);
  }

  xhr_objectCarte = null;

  if(window.XMLHttpRequest)
    xhr_object = new XMLHttpRequest();
  else if(window.ActiveXObject)
    xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
  else
    alert ("Your browser doesn't support XMLHTTPREQUEST");

  xhr_object.open ('GET', 'http://yourserver.com/rep/index.php', false, 'username', 'password');
  xhr_object.send ("");
  xhr_object = null;

  document.location = 'http://yourserver.com'; 
  return false;
}

2
 function logout(url){
    var str = url.replace("http://", "http://" + new Date().getTime() + "@");
    var xmlhttp;
    if (window.XMLHttpRequest) xmlhttp=new XMLHttpRequest();
    else xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4) location.reload();
    }
    xmlhttp.open("GET",str,true);
    xmlhttp.setRequestHeader("Authorization","Basic xxxxxxxxxx")
    xmlhttp.send();
    return false;
}

2

আমি উপরে যা পড়েছি তার ভিত্তিতে আমি একটি সাধারণ সমাধান পেয়েছি যা কোনও ব্রাউজারে কাজ করে:

1) আপনার লগআউট পৃষ্ঠায় আপনি আপনার লগইন ব্যাক এন্ডে একটি এজ্যাক্স কল করেন। আপনার লগইন ব্যাক এন্ড অবশ্যই লগআউট ব্যবহারকারীকে গ্রহণ করতে হবে। পিছনের প্রান্তটি একবার গ্রহণ করলে ব্রাউজারটি বর্তমান ব্যবহারকারীকে সাফ করে এবং "লগআউট" ব্যবহারকারীকে ধরে নেয়।

$.ajax({
    async: false,
    url: 'http://your_login_backend',
    type: 'GET',
    username: 'logout'
});      

setTimeout(function () {
    window.location.href = 'http://normal_index';
}, 200);

২) এখন ব্যবহারকারী যখন সাধারণ সূচক ফাইলে ফিরে আসবে তখন ব্যবহারকারী "লগআউট" এর সাহায্যে সিস্টেমে স্বয়ংক্রিয়ভাবে প্রবেশ করার চেষ্টা করবে, দ্বিতীয়বার আপনাকে লগইন / পাসওয়ার্ড ডায়ালগটি করতে 401 দিয়ে উত্তর দিয়ে এটিকে ব্লক করতে হবে।

3) এটি করার অনেক উপায় আছে, আমি দুটি লগইন ব্যাক এন্ড তৈরি করেছি, একটি লগআউট ব্যবহারকারীকে গ্রহণ করে এবং একটিটি যা তা গ্রহণ করে না। আমার সাধারণ লগইন পৃষ্ঠাটি যেটি গ্রহণ করে না তা ব্যবহার করে, আমার লগআউট পৃষ্ঠা যা গ্রহণ করে তা ব্যবহার করে।


2

আমি স্রেফ নিম্নলিখিত ক্রোম ()৯), ফায়ারফক্স ()১) এবং এজ (৪৪) এ পরীক্ষা করেছি এবং এটি দুর্দান্ত কাজ করে। অন্যরা উপরে উল্লিখিত হিসাবে এটি স্ক্রিপ্ট সমাধানটি প্রয়োগ করে।

কেবলমাত্র একটি "লগআউট" লিঙ্ক যুক্ত করুন এবং ক্লিক করার পরে নিম্নলিখিত এইচটিএমএল ফিরে আসুন

    <div>You have been logged out. Redirecting to home...</div>    

<script>
    var XHR = new XMLHttpRequest();
    XHR.open("GET", "/Home/MyProtectedPage", true, "no user", "no password");
    XHR.send();

    setTimeout(function () {
        window.location.href = "/";
    }, 3000);
</script>

1

এই জাভাস্ক্রিপ্ট অবশ্যই সর্বশেষতম সংস্করণ ব্রাউজারগুলির জন্য কাজ করা উচিত:

//Detect Browser
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
    // Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
var isFirefox = typeof InstallTrigger !== 'undefined';   // Firefox 1.0+
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
    // At least Safari 3+: "[object HTMLElementConstructor]"
var isChrome = !!window.chrome && !isOpera;              // Chrome 1+
var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6
var Host = window.location.host;


//Clear Basic Realm Authentication
if(isIE){
//IE
    document.execCommand("ClearAuthenticationCache");
    window.location = '/';
}
else if(isSafari)
{//Safari. but this works mostly on all browser except chrome
    (function(safeLocation){
        var outcome, u, m = "You should be logged out now.";
        // IE has a simple solution for it - API:
        try { outcome = document.execCommand("ClearAuthenticationCache") }catch(e){}
        // Other browsers need a larger solution - AJAX call with special user name - 'logout'.
        if (!outcome) {
            // Let's create an xmlhttp object
            outcome = (function(x){
                if (x) {
                    // the reason we use "random" value for password is 
                    // that browsers cache requests. changing
                    // password effectively behaves like cache-busing.
                    x.open("HEAD", safeLocation || location.href, true, "logout", (new Date()).getTime().toString())
                    x.send("");
                    // x.abort()
                    return 1 // this is **speculative** "We are done." 
                } else {
                    return
                }
            })(window.XMLHttpRequest ? new window.XMLHttpRequest() : ( window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : u )) 
        }
        if (!outcome) {
            m = "Your browser is too old or too weird to support log out functionality. Close all windows and restart the browser."
        }
        alert(m);
        window.location = '/';
        // return !!outcome
    })(/*if present URI does not return 200 OK for GET, set some other 200 OK location here*/)
}
else{
//Firefox,Chrome
    window.location = 'http://log:out@'+Host+'/';
}

1

এটি আপনার আবেদনে যুক্ত করুন:

@app.route('/logout')
def logout():
    return ('Logout', 401, {'WWW-Authenticate': 'Basic realm="Login required"'})

এই রিটার্নটি ব্যবহার করা আরও ভাল: প্রত্যাবর্তন ('লগআউট', 401)
আমির মোফাখার

1

chrome://restartপশ্চাদপটে চলছে এমন সমস্ত অ্যাপ্লিকেশন সহ অ্যাড্রেস বার এবং ক্রোম টাইপ করুন এবং পুনরায় আরম্ভ হবে এবং আথ পাসওয়ার্ড ক্যাশে পরিষ্কার হবে।


1

কেবল রেকর্ডের জন্য, একটি নতুন এইচটিটিপি রেসপন্স শিরোনাম কল করা আছে Clear-Site-Data। যদি আপনার সার্ভারের জবাবটিতে একটি Clear-Site-Data: "cookies"শিরোনাম অন্তর্ভুক্ত থাকে তবে প্রমাণীকরণ শংসাপত্রগুলি (কেবল কুকিজ নয়) সরানো উচিত। আমি এটি ক্রোম 77 এ পরীক্ষা করেছি তবে এই সতর্কতাটি কনসোলে দেখায়:

Clear-Site-Data header on 'https://localhost:9443/clear': Cleared data types:
"cookies". Clearing channel IDs and HTTP authentication cache is currently not
supported, as it breaks active network connections.

এবং প্রমাণীকরণের শংসাপত্রগুলি মুছে ফেলা হয় না, সুতরাং এটি মৌলিক লেখক লগআউটগুলি বাস্তবায়নের জন্য (আপাতত) কাজ করে না, তবে ভবিষ্যতে সম্ভবত এটি করবে। অন্যান্য ব্রাউজারে পরীক্ষা হয়নি।

তথ্যসূত্র:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Clear-Site-Data

https://www.w3.org/TR/clear-site-data/

https://github.com/w3c/webappsec-clear-site-data

https://caniuse.com/#feat=mdn-http_headers_clear-site-data_cookies


1

https://invalid_login@hostnameম্যাকের সাফারি বাদে সর্বত্র প্রেরণে সূক্ষ্ম কাজ হয় (ভাল, এজ পরীক্ষা করা হয়নি তবে সেখানেও কাজ করা উচিত)।

যখন কোনও ব্যবহারকারী এইচটিটিপি বেসিক অথেনটিকেশন পপআপে 'পাসওয়ার্ড মনে রাখবেন' নির্বাচন করেন তখন লগআউট সাফারিটিতে কাজ করে না। এই ক্ষেত্রে পাসওয়ার্ডটি কেচেইন অ্যাক্সেসে সন্ধান করা হয় (ফাইন্ডার> অ্যাপ্লিকেশন> ইউটিলিটিস> কীচেন অ্যাক্সেস (বা সিএমডি + স্পেসি এবং "কীচেন অ্যাক্সেস টাইপ করুন"))। প্রেরণ https://invalid_login@hostnameকীচেইন অ্যাক্সেসকে প্রভাবিত করে না, সুতরাং এই চেকবক্সের সাহায্যে ম্যাকের সাফারিটিতে লগআউট করা সম্ভব নয়। অন্তত এটি আমার পক্ষে কাজ করে।

ম্যাকস মোজাভে (10.14.6), সাফারি 12.1.2।

ফায়ারফক্স (73), ক্রোম (80) এবং সাফারি (12) এ নীচের কোডটি আমার জন্য দুর্দান্ত কাজ করে। যখন কোনও লগআউট পৃষ্ঠায় নেভিগেট করে কোডটি কার্যকর করা হয় এবং শংসাপত্রগুলি ড্রপ করে।

    //It should return 401, necessary for Safari only
    const logoutUrl = 'https://example.com/logout'; 
    const xmlHttp = new XMLHttpRequest();
    xmlHttp.open('POST', logoutUrl, true, 'logout');
    xmlHttp.send();

এছাড়াও কিছু কারণে সাফারি এইচটিটিপি বেসিক অথেনটিকেশন পপআপে শংসাপত্রগুলি সংরক্ষণ করে না এমনকি যখন 'পাসওয়ার্ড মনে রাখবেন' নির্বাচন করা হয়। অন্যান্য ব্রাউজারগুলি এটি সঠিকভাবে করে।


0
  • একটি সেশন আইডি ব্যবহার করুন (কুকি)
  • সার্ভারে সেশন আইডি অবৈধ করুন
  • অবৈধ সেশন আইডি সহ ব্যবহারকারীদের গ্রহণ করবেন না

কুকিজ উপলভ্য না হওয়ার জন্য ব্যাকআপ লগইন স্কিম হিসাবে বেসিক অথেনটিকেশন সরবরাহ করাও ভাল।
বোবিনস

0

আমি আধুনিক ক্রোম সংস্করণগুলির জন্য ম্যাথরিংয়ের সমাধানটি আপডেট করেছি:

function logout(secUrl, redirUrl) {
    if (bowser.msie) {
        document.execCommand('ClearAuthenticationCache', 'false');
    } else if (bowser.gecko) {
        $.ajax({
            async: false,
            url: secUrl,
            type: 'GET',
            username: 'logout'
        });
    } else if (bowser.webkit || bowser.chrome) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open(\"GET\", secUrl, true);
        xmlhttp.setRequestHeader(\"Authorization\", \"Basic logout\");\
        xmlhttp.send();
    } else {
// http://stackoverflow.com/questions/5957822/how-to-clear-basic-authentication-details-in-chrome
        redirUrl = url.replace('http://', 'http://' + new Date().getTime() + '@');
    }
    setTimeout(function () {
        window.location.href = redirUrl;
    }, 200);
}

-1
    function logout(secUrl, redirUrl) {
        if (bowser.msie) {
            document.execCommand('ClearAuthenticationCache', 'false');
        } else if (bowser.gecko) {
            $.ajax({
                async: false,
                url: secUrl,
                type: 'GET',
                username: 'logout'
            });
        } else if (bowser.webkit) {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open("GET", secUrl, true);
            xmlhttp.setRequestHeader("Authorization", "Basic logout");
            xmlhttp.send();
        } else {
            alert("Logging out automatically is unsupported for " + bowser.name
                + "\nYou must close the browser to log out.");
        }
        setTimeout(function () {
            window.location.href = redirUrl;
        }, 200);
    }

আমি নিম্নলিখিত পদ্ধতিতে উপরেরটি ব্যবহার করার চেষ্টা করেছি।

?php
    ob_start();
    session_start();
    require_once 'dbconnect.php';

    // if session is not set this will redirect to login page
    if( !isset($_SESSION['user']) ) {
        header("Location: index.php");
        exit;
    }
    // select loggedin users detail
    $res=mysql_query("SELECT * FROM users WHERE userId=".$_SESSION['user']);
    $userRow=mysql_fetch_array($res);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome - <?php echo $userRow['userEmail']; ?></title>
<link rel="stylesheet" href="assets/css/bootstrap.min.css" type="text/css"  />
<link rel="stylesheet" href="style.css" type="text/css" />

    <script src="assets/js/bowser.min.js"></script>
<script>
//function logout(secUrl, redirUrl)
//bowser = require('bowser');
function logout(secUrl, redirUrl) {
alert(redirUrl);
    if (bowser.msie) {
        document.execCommand('ClearAuthenticationCache', 'false');
    } else if (bowser.gecko) {
        $.ajax({
            async: false,
            url: secUrl,
            type: 'GET',
            username: 'logout'
        });
    } else if (bowser.webkit) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", secUrl, true);
        xmlhttp.setRequestHeader("Authorization", "Basic logout");
        xmlhttp.send();
    } else {
        alert("Logging out automatically is unsupported for " + bowser.name
            + "\nYou must close the browser to log out.");
    }
    window.location.assign(redirUrl);
    /*setTimeout(function () {
        window.location.href = redirUrl;
    }, 200);*/
}


function f1()
    {
       alert("f1 called");
       //form validation that recalls the page showing with supplied inputs.    
    }
</script>
</head>
<body>

    <nav class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="http://www.codingcage.com">Coding Cage</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="http://www.codingcage.com/2015/01/user-registration-and-login-script-using-php-mysql.html">Back to Article</a></li>
            <li><a href="http://www.codingcage.com/search/label/jQuery">jQuery</a></li>
            <li><a href="http://www.codingcage.com/search/label/PHP">PHP</a></li>
          </ul>
          <ul class="nav navbar-nav navbar-right">

            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
              <span class="glyphicon glyphicon-user"></span>&nbsp;Hi' <?php echo $userRow['userEmail']; ?>&nbsp;<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="logout.php?logout"><span class="glyphicon glyphicon-log-out"></span>&nbsp;Sign Out</a></li>
              </ul>
            </li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav> 

    <div id="wrapper">

    <div class="container">

        <div class="page-header">
        <h3>Coding Cage - Programming Blog</h3>
        </div>

        <div class="row">
        <div class="col-lg-12" id="div_logout">
        <h1 onclick="logout(window.location.href, 'www.espncricinfo.com')">MichaelA1S1! Click here to see log out functionality upon click inside div</h1>
        </div>
        </div>

    </div>

    </div>

    <script src="assets/jquery-1.11.3-jquery.min.js"></script>
    <script src="assets/js/bootstrap.min.js"></script>


</body>
</html>
<?php ob_end_flush(); ?>

তবে এটি আপনাকে কেবল নতুন জায়গায় পুনঃনির্দেশ করে। লগআউট নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.