সার্ভার দিক থেকে কীভাবে url হ্যাশ পাবেন (#)


133

আমি ক্লায়েন্ট সাইডে (জাভাস্ক্রিপ্ট) জানি আপনি উইন্ডোজ.লোকেশন.হ্যাশ ব্যবহার করতে পারেন তবে সার্ভার সাইড থেকে অ্যাক্সেস পেতে কোনওভাবেই খুঁজে পেলেন না।


আপনি কি এই সমস্যার উত্সাহ পাওয়ার উপায় পেয়েছেন, আমার কাছে ইউআরএল সহ বুকমার্ক রয়েছে এবং সার্ভারের পাশে হ্যাশের পরে পাঠ্যটি অ্যাক্সেস করতে চাই?
dotnetcoder

উত্তরগুলি ব্যাখ্যা করে যে এটি সার্ভারে পাওয়া যায় না, কারণ এটি কেবলমাত্র ব্যবহারকারী এজেন্ট দ্বারা ব্যাখ্যা করা হয়। আমি সক্রিয় ট্যাবটি পরিবর্তন করার চেষ্টা করছিলাম, যা আমি সার্ভারের পাশে এটি করার চেষ্টা করছিলাম। আমি ক্লায়েন্ট পক্ষের পরিবর্তে এটি শেষ করেছিলাম।
রিকি সুপিত

উত্তর:


134

আমাদের এমন পরিস্থিতি হয়েছিল যেখানে আমাদের এএসপি. নেট পোস্ট ব্যাক জুড়ে ইউআরএল হ্যাশ ধরে রাখা দরকার। ব্রাউজারটি হ্যাশটি সার্ভারে ডিফল্টরূপে না পাঠায়, কেবলমাত্র এটি করার কয়েকটি উপায় জাভাস্ক্রিপ্ট ব্যবহার করা:

  1. ফর্মটি জমা window.location.hashদিলে , হ্যাশটি ধরে ফেলুন ( ) এবং এটি একটি সার্ভারের পাশের লুকানো ইনপুট ক্ষেত্রে সংরক্ষণ করুন " urlhash" এর আইডি সহ এটি একটি ডিআইভিতে রাখুন যাতে আমরা এটি পরে খুঁজে পেতে পারি।

  2. সার্ভারে আপনি যদি এটির সাথে কিছু করার দরকার হয় তবে আপনি এই মানটি ব্যবহার করতে পারেন। আপনার প্রয়োজন হলে আপনি এটি পরিবর্তন করতে পারেন।

  3. ক্লায়েন্টের পৃষ্ঠা লোডে , এই লুকানো ক্ষেত্রের মানটি পরীক্ষা করুন। আপনি এটি ডিআইভি দ্বারা এটি সন্ধান করতে চাইবেন যাতে এটি এতে অন্তর্ভুক্ত থাকে কারণ স্বয়ংক্রিয়ভাবে উত্পন্ন আইডিটি পরিচিত হবে না। হ্যাঁ, আপনি এখানে .ClientID এর সাথে কিছু কৌতুকপূর্ণ কাজ করতে পারেন তবে আমরা কেবলমাত্র মোড়ক ডিআইভি ব্যবহার করা সহজ বলে মনে করেছি কারণ এটি এই সমস্ত জাভাস্ক্রিপ্টকে একটি বাহ্যিক ফাইলে থাকতে দেয় এবং জেনেরিক ফ্যাশনে ব্যবহার করতে পারে।

  4. যদি লুকানো ইনপুট ক্ষেত্রটির কোনও বৈধ মান থাকে তবে এটি URL হ্যাশ ( window.location.hash again) হিসাবে সেট করুন এবং / অথবা অন্যান্য ক্রিয়া করুন।

ক্ষেত্র ইত্যাদি নির্বাচনকে সহজ করার জন্য আমরা jQuery ব্যবহার করেছি ইত্যাদি ... সব মিলিয়ে এটি শেষ হয় কয়েকটি জিকুয়েরি কল, একটি মান বাঁচাতে এবং অন্যটি পুনরুদ্ধার করার জন্য।

জমা দেওয়ার আগে:

$("form").submit(function() {
  $("input", "#urlhash").val(window.location.hash);
});

পৃষ্ঠা লোডে:

var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
  window.location.hash = hashVal;
}

IsHashValid()" undefined" বা অন্যান্য জিনিস আপনি পরিচালনা করতে চান না তা পরীক্ষা করতে পারে।

$(document).ready()অবশ্যই, আপনি অবশ্যই যথাযথভাবে ব্যবহার করেছেন তা নিশ্চিত করুন ।


4
দুর্দান্ত সমাধান, তবে জিইটি অনুরোধ সম্পর্কে কী?
ওয়ার্লক

2
@ ক্রিস - আপনি যখন অন্য কোনও ব্রাউজারে কেবল ইউআরএল পেস্ট করবেন তখন কীভাবে ফর্ম-জমা দেওয়ার ইভেন্টটি ডাকা হবে (কারণ এটি কেবল একটি জিইটি অনুরোধ)?
কৃষ্ণপ্রকাশ

@ ওয়ার্লক, আপনি কোনও লুকানো ক্ষেত্রে হ্যাশ সংরক্ষণ করছেন তাই এটি পেতে / পোস্ট করা নির্বিশেষে এটি কাজ করবে।
কেএমএক্স

83

আরএফসি 2396 বিভাগ 4.1:

যখন কোনও ইউআরআই রেফারেন্স চিহ্নিত সংস্থার উপর পুনরুদ্ধার ক্রিয়া সঞ্চালনের জন্য ব্যবহৃত হয়, তখন ক্রশচ্যাচ ("#") অক্ষর দ্বারা ইউআরআই থেকে পৃথক optionচ্ছিক খণ্ড সনাক্তকারী, অতিরিক্ত রেফারেন্স তথ্য ধারণ করে ব্যবহারকারীর এজেন্ট দ্বারা পুনরুদ্ধারের পরে ব্যাখ্যা করার জন্য কর্ম সফলভাবে সম্পন্ন হয়েছে । যেমনটি, এটি কোনও ইউআরআই-র অংশ নয়, তবে প্রায়শই এটি ইউআরআইয়ের সাথে একত্রে ব্যবহৃত হয়।

(সামনে জোর দাও)


3
আমি বিস্মিত. আমি এসপিএ সম্পর্কে অনেক কিছু পড়েছি এবং এটি জানি না। তাই ব্রাউজার এত সংবেদনশীল তথ্য প্রেরণ করে তবে হ্যাশ নয় ?? আমি মনে করি এটি ভবিষ্যতে হওয়া উচিত .. কমপক্ষে পৃথক এইচটিটিপি শিরোনাম হিসাবে। এটি সম্পর্কিত: onebigfluke.com/2015/01/…
bodrin


7

সম্ভবত একমাত্র পছন্দ হ'ল এটি ক্লায়েন্টের পক্ষ থেকে পড়া এবং এটি ম্যানুয়ালি সার্ভারে স্থানান্তর করা (GET / POST / AJAX)। শ্রদ্ধা আর্তুর

আপনি মালেকানে কীভাবে ব্যাক বোতাম এবং ব্রাউজারের ইতিহাসের সাথে খেলবেন তাও দেখতে পাবেন


3

আপনি সম্ভবত কোনও জিইটি / পোস্টে টুকরোটি দেখার চেষ্টা করছেন না এবং আপনার সার্ভার-সাইড কোডের মধ্যে থাকা কোনও ইউআরআই অবজেক্টের সেই অংশটি কীভাবে অ্যাক্সেস করবেন তা জানতে চান, তবে এটি ইউরি.ফ্রেগমেন্টের আওতায় রয়েছে ( এমএসডিএন ডক্স )।


8
আইই 8, ক্রোম এবং ফায়ারফক্স সমস্ত হ্যাশ সার্ভারে প্রেরণ করবে না; তাই হয়, Uri.Fragment সবসময় একটি খালি স্ট্রিং যদি আপনি Request.Url.Fragment সার্ভার সাইড পরীক্ষা হয় (উপরে জবাব দেওয়া অনুযায়ী।)
zcrar70

0

জিইটি অনুরোধগুলির সম্ভাব্য সমাধান:

নতুন লিঙ্ক ফর্ম্যাট: http://example.com/yourDirectory?hash=video01

নিয়ন্ত্রণকারীর শীর্ষে এই ফাংশনটি কল করুন বা http://example.com/yourDirectory/index.php:

function redirect()
{
    if (!empty($_GET['hash'])) {
        /** Sanitize & Validate $_GET['hash']
               If valid return string
               If invalid: return empty or false
        ******************************************************/
        $validHash = sanitizeAndValidateHashFunction($_GET['hash']);
        if (!empty($validHash)) {
            $url = './#' . $validHash;
        } else {
            $url = '/your404page.php';
        }
        header("Location: $url");
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.