باز شدن يك صفحه جديد در web browser فقط براي يك بار!!

m_ziba

Member
سلام!

ببينيد بچه ها اينو كسي بلده؟

من مي خوام لينك من يك صفحه جديد باز كنه. خوب اين تو HTML كه اين طوري:
<a href="link" target=_blank>

ولي من مي خوام يه بار كه صفحه باز شد بفهمه كه صفحه باز شده! دوباره ديگه بازش نكنه.

حالا چه طوريه اين طوري؟
 

AliReza26

Active Member
m_ziba گفت:
سلام!

ببينيد بچه ها اينو كسي بلده؟

من مي خوام لينك من يك صفحه جديد باز كنه. خوب اين تو HTML كه اين طوري:
<a href="link" target=_blank>

ولي من مي خوام يه بار كه صفحه باز شد بفهمه كه صفحه باز شده! دوباره ديگه بازش نكنه.

حالا چه طوريه اين طوري؟
با چه زبوني مي خواهي.....
 

hoom

Active Member
سلام

این سوال به قسمت کلاینت تعلق داره، ولی جوابش اینطوری میشه

کد:
<Script Language="JavaScript">
var myWin = null;

function OpenNewWindow(strLink)
{
if (myWin && (! myWin.closed))
   {
	alert('Link is already open: ' + myWin.location);
   }
else
	{
	myWin = window.open(strLink,"MyWindow","height=200,width=400,status=yes,toolbar=no,menubar=no,location=no");
	myWin.location = strLink;
	}
}
</Script>

<body>

<p><a href="JavaScript:OpenNewWindow('http://www.google.com');">Click here to open 1st Window</a></p>
<p><a href="JavaScript:OpenNewWindow('http://www.yahoo.com');">Click here to open link in same Window</a></p>
<p><a href="http://www.majidonline.com" Target="_Blank">Click here to open a new Window</a></p>
<p> </p>

</body>

ارادتمند
 

AliReza26

Active Member
بعد از باز شدن اون صفحه مي تواني با يك كوكي و يا ثبت باز شدن اون صفحه تو يه فايل تكس يا ديتابيس از باز شدن صفحه مطلع باشي....

در ادامه با دستور If چك مي كني كه اون صفحه با استفاده از چيزهايي كه گفتم باز شده يا نه...

اگه باز شده بود ديگه لينك را نمي ذاري....

مثلا اگه با کوکی چک می کنی باید برای آگاهی از کلیک کرده شده روی لینک کد زیر را بنویسی :

کد:
IF Not request.cookies("clicked").haskey then

response.write("<a href="link" target=_blank>")

End if

در ادامه در صفحه link هم كد زير را به صفحه ات اضافه كن تا كليك روي اون لينك ثبت شود :

کد:
response.cookies("clicked").("link1") = "OK"
response.cookies("clicked").("link1").expiress" = date() + 365
 

hoom

Active Member
سلام

خودت اين كد رو امتحان كردی؟ اين روش يه كوكي روي سرور درست ميكنه. درضمن اگر كوكي ست باشه لينك رو اصلا نشون نميده ولی سوال این بوده که تشخیص بده و دوباره بازش نکنه

ارادتمند
 

taher007

Member
با سرور ساید ممکن هست ، ولی چیز جالبی نمیشه...
با جاوا اسکریپت مطمینا سریع تر و بهتر میشه ...
من خیلی از جاوا اسکریپت سر در نمیارم... اگه خواستید میتونم با session در php طرز انجام چنین کاری رو توضیح بدم...
 

AliReza26

Active Member
hoom گفت:
سلام

خودت اين كد رو امتحان كردی؟ اين روش يه كوكي روي سرور درست ميكنه. درضمن اگر كوكي ست باشه لينك رو اصلا نشون نميده ولی سوال این بوده که تشخیص بده و دوباره بازش نکنه

ارادتمند

خوب به اين تغييرش بده :

کد:
IF Not request.cookies("clicked").haskey then 

response.write("<a href="link" target=_blank>YOUR TEXT</a>") 

else

response.write("YOUR TEXT") 

End if

اگر هم مي خواهي بصورت لينك باشه از كد زير استفاده كن


کد:
IF Not request.cookies("clicked").haskey then 

response.write("<a href="link" target=_blank>YOUR TEXT</a>") 

else

response.write("<a href="#">YOUR TEXT</a>") 

End if
 

hoom

Active Member
سلام

اونوقت اگر طرف پنجره رو بسته بود و دوباره ميخواست روش كليك كنه چي؟ اگر يه نفر ديگه خواست اون رو باز كنه چي؟ همونطور كه گفتم اين يه كوكي روي سرور درست ميكنه

ارادتمند
 

AliReza26

Active Member
درسته ....

براي اون كه اين لينك براي همه غير فعال بشه بايد شما بجاي ثبت كليك توي كوكي .....در يه تكست فايل عمل كليك را ثبت كني......
 

hoom

Active Member
خب این عمل لینک فقط برای یه نفره. قرار نیست وقتی یه نفر روی یه لینک کلیک کرد همه کاربرای یه سایت از اون محروم بشن. این تکست فایل کجا باید ذخیره بشه؟
نمیشه بگی بلد نیستم و همینطوری میخواستم یه جوابی داده باشم و خودت رو راحت کنی؟

ارادتمند
 

AliReza26

Active Member
جايي كه ميخواهي لينك باشه كدهاي زير را اضافه كن....

کد:
<%

  dim strconnection , stropen ,strtxt
 strsource = Server.Mappath("txt1.txt")
    set strconnection = createobject("scripting.filesystemobject")
        if not strconnection.fileexists(strsource) then
         strconnection.createtextfile(strsource)
        end if
    set stropen = strconnection.opentextfile(strsource,1)

do while not stropen.atendofstream
   strtxt = stropen.readline
loop
   if not strtxt = "ok" then
      response.write("<a href='link' target=_blank>YOUR TEXT</a>") 
     else 
      response.write("YOUR TEXT") 
    end if

  stropen.close

%>

و در صفحه لينكت كد هاي زير را اضافه كن....

کد:
<%
  dim strconnection , stropen

 strsource = Server.Mappath("txt1.txt")
    set strconnection = server.createobject("scripting.filesystemobject")
        if not strconnection.fileexists(strsource) then
         strconnection.createtextfile(strsource)
        end if
    set stropen = strconnection.opentextfile(strsource,2)

    stropen.write("ok")

  stropen.close
%>


در ضمن يك بار ديگه ميگم...
اين روشي كه الان گفتم لينك را در صورت يكبار كليك شدن براي تمام اعضا غير فعال ميكنه...
اما روش قبلي كه با كوكي برات توضيح دادم لينك را فقط براي كاربري كه اون لينك را كليك كرده غير فعال ميكنه....
 

a_mollaei

Member
hoom گفت:
خب این عمل لینک فقط برای یه نفره. قرار نیست وقتی یه نفر روی یه لینک کلیک کرد همه کاربرای یه سایت از اون محروم بشن. این تکست فایل کجا باید ذخیره بشه؟
نمیشه بگی بلد نیستم و همینطوری میخواستم یه جوابی داده باشم و خودت رو راحت کنی؟

ارادتمند

دوست عزيز لطفا اگر مفهوم مطلبي رو نمي دونيد در مورد آن بحث نكنيد.

كدي كه آقاي AliReza26 نوشتن كاملا درست كار مي كنه. در ضمن هيچ وقت كوكي روي سرور ساخته نميشه و هميشه روي سيستم كاربر ساخته ميشه. اين يكي از مفاهيم اوليه برنامه نويسي وب هست.

براي سوال هم همونطور كه عليرضا گفت هم مي تونيد از كوكي استفاده كنيد و هم از Session كه در اين مورد session بهتر جواب ميده.
 

AliReza26

Active Member
a_mollaei گفت:
hoom گفت:
خب این عمل لینک فقط برای یه نفره. قرار نیست وقتی یه نفر روی یه لینک کلیک کرد همه کاربرای یه سایت از اون محروم بشن. این تکست فایل کجا باید ذخیره بشه؟
نمیشه بگی بلد نیستم و همینطوری میخواستم یه جوابی داده باشم و خودت رو راحت کنی؟

ارادتمند

دوست عزيز لطفا اگر مفهوم مطلبي رو نمي دونيد در مورد آن بحث نكنيد.

كدي كه آقاي AliReza26 نوشتن كاملا درست كار مي كنه. در ضمن هيچ وقت كوكي روي سرور ساخته نميشه و هميشه روي سيستم كاربر ساخته ميشه. اين يكي از مفاهيم اوليه برنامه نويسي وب هست.

براي سوال هم همونطور كه عليرضا گفت هم مي تونيد از كوكي استفاده كنيد و هم از Session كه در اين مورد session بهتر جواب ميده.
ممنون از تكميل مطالب بالا......
 

alighat

New Member
خوب اينكه دعوا نداره !
معلومات من ضعيفه :wink: ولي
چيزي كه در مورد كوكي ها گفته شد درسته . كوكي اصولا رو client كار مي كنه و روي سرور معني نداره
ولي در كل برنامه اي كه hoom نوشته بود درسته و اصوليه . چون براي اين كار برنامه ي Server Side نمي تونه جوابگو باشه چون اگه بخواد رو صفحه اعمال بشه و مثلا اين دفعه لينك مربوطه رو نشون نداده باشه بايد صفحه دوباره لود بشه . اگه طرف صفحه رو ببنده كه ديگه هيچ

ولي برنامه اي كه با Java Script نوشتن خيلي خوبه و به درد بخوره و فورا با باز يا بسته شدن صفحه كار ميكنه و كامله ، البته با طرز برخوردشون موافق نيستم :? در مورد كوكي هم اشتباه مي كنن .
 

a_mollaei

Member
alighat گفت:
خوب اينكه دعوا نداره !
معلومات من ضعيفه :wink: ولي
چيزي كه در مورد كوكي ها گفته شد درسته . كوكي اصولا رو client كار مي كنه و روي سرور معني نداره
ولي در كل برنامه اي كه hoom نوشته بود درسته و اصوليه . چون براي اين كار برنامه ي Server Side نمي تونه جوابگو باشه چون اگه بخواد رو صفحه اعمال بشه و مثلا اين دفعه لينك مربوطه رو نشون نداده باشه بايد صفحه دوباره لود بشه . اگه طرف صفحه رو ببنده كه ديگه هيچ

ولي برنامه اي كه با Java Script نوشتن خيلي خوبه و به درد بخوره و فورا با باز يا بسته شدن صفحه كار ميكنه و كامله ، البته با طرز برخوردشون موافق نيستم :? در مورد كوكي هم اشتباه مي كنن .

آقا ما هم دعوا نكرديم.

به نظر من هم را حل آقاي Hoom بهتر جواب مي ده. اما در مورد كوكي ها در صورتي راه علي رضا استفاده مي شه كه شما بخوايد در تمام طول بازديد يه فرد از سايت لينك تنها يك بار براي اون نمايش داده بشه.

معمولا از اين راه براي Popup ها در سايت استفاده مي كنن كه در اولين بازديد Popup باز مي شه و ديگه هر چقدر كه صفحه رو Refresh كنيد Popup باز نمي شه.
 

AliReza26

Active Member
به هر حال حتما ايشون چه سرور سايدشو و چه كلاينت سايدشو بخواد استفاده كنه بروبچ راهنمايي هاي لازم را بهشون كردند.....
 

a_mollaei

Member
AliReza26 گفت:
به هر حال حتما ايشون چه سرور سايدشو و چه كلاينت سايدشو بخواد استفاده كنه بروبچ راهنمايي هاي لازم را بهشون كردند.....

كاملا. :)

علي جان بروبچ لحجه داره بگو بروبچس كه بدون لحجه باشه.
 

hoom

Active Member
alighat گفت:
خوب اينكه دعوا نداره !
معلومات من ضعيفه :wink: ولي
چيزي كه در مورد كوكي ها گفته شد درسته . كوكي اصولا رو client كار مي كنه و روي سرور معني نداره

كوكي هاي جاوا اسكريپت برروي كامپيوتر بازديد كننده سايتتون ذخيره ميشن. اگر دايركتوري
C:\Documents and Settings\نام كاربري شما\Cookies\
رو ببينيد ميتونين ليستي از اونها رو داشته باشيد.
كوكي هايي كه با ASP نوشته ميشوند برروي سرور ذخيره ميشوند و با بازديد كاربر از صفحه، براي او فرستاده ميشوند. براي همين به آنها كوكي سرور ميگويند. مشكل اين نوع كوكي وقتي خود را معلوم ميكند كه شما چند تا وب سرور داشته باشيد كه با يه Load Balancer بالانس شده باشن. در اين صورت امكان داره كه سروري كه دستگاه لود بالانسر شما رو ميفرسته با اوني كه قبلا بوديد فرق كنه و كوكي رو دريافت نكنيد. البته لود بالانسرها جدولي دارند كه مشخصات شما رو تا چند ساعت ضبط ميكنند و درصورت امكان شما رو به همان سروري ميفرستند كه قبلا بوده‌ايد. به اين روش Sticky IP ميگويند.
اميدوارم كه مطلب رو متوجه شده باشيد

البته با طرز برخوردشون موافق نيستم در مورد كوكي هم اشتباه مي كنن .

يكي از دلايلي كه ديگه من زياد توي اين سايت نميام و جواب نميدم همينه كه كاربرا بدون توجه به جوابهاي داده شده يه جواب ديگه ميدن (حالا درست يا غلطش بماند) اين موضوع باعث شده كه خيلي از كاربراي خوب و باسواد اصلا جواب سوالها رو ندن ، سامان و دوتا اميدها و خيلي‌هاي ديگه از اين قبيل كاربراي واقعا باسواد اين سايت هستن (يا بودن) كه الان ديگه اصلا جوابي از اونها نميبينيد. جواب عليرضا هم كاملا اشتباه بود، براي همين من يه كمي زيادي دخالت كردم. چشم سعي ميكنم همونطور مثل گذشته Read-Only بمونم.

ارادتمند همگي
 

جدیدترین ارسال ها

بالا