با سلام اساتید محترم
چطوری میشه توی فریمورک yii مقدار ip رو کش کرد؟
یعنی یه ip رو برای تموم کاربران تا چند ساعت کش کنیم که فقط این آپی نشون داده بشه؟
آیا راهی هست؟
خیلی ممنون میشم راهنمایی کنید بهش نیاز دارم
با تشکر
با سلام اساتید محترم
چطوری میشه توی فریمورک yii مقدار ip رو کش کرد؟
یعنی یه ip رو برای تموم کاربران تا چند ساعت کش کنیم که فقط این آپی نشون داده بشه؟
آیا راهی هست؟
خیلی ممنون میشم راهنمایی کنید بهش نیاز دارم
با تشکر
کد PHP:
//set
Yii::$app->cache->set ( $key, $value, 60 * 60); //1h
//get
Yii::$app->cache->get( $key) ;
پارامتر سوم به ثانیه هست مدت زمان ذخیره کش هست .
ویرایش توسط Marshall : December 12th, 2019 در ساعت 18:16
درود
من دیباگ نکردن کدها رو یعنی اصلا yii هم نصب ندارم
یک چیزی شریع زدم (با در نظر گرفتن این موضوع که شما تسلط ندارید روی کدها)
بهرحال خواستی یک دسترسی بده حلش کنم
-----
با سلام خیلی از لطف و محبتتون ممنونم
سایت هم واسه من نیست و برای یکی از دوستانمه (بهش میگم واسه دسترسی اگه قبول کرد چشم براتون ارسال می کنم)
من کدها رو در آخر اینطوری ویرایش کردم
می خواستم خروجی که از کدها می گیرم فقط برای هر آپ پی در هر صفحه یک عدد باشه کدهایی که شما اول نوشته بودید توی هر صفحه ای که باز می کردید خیلی داده ها رو می نوشت از جمله آی پی و آدرس آرجاع ها رو، و اگه یه صفحه دیگه با آی پی دیگه باز می کردید باز هم توی صفحه جدید داده ی اون صفحه و داده صفحه قبل هم نشون داده می شد برای همین داده ها رو در انتها به این شکل درآوردم. الان همون طوری که من انتظار دارم کدها عمل می کنند (البته شاید چون تسلط کافی به برنامه نویسی ندارم) ولی وقتی صفحات رو عوض می کنم باز هم برای همه آی پی ها یه چیز ثابت ثبت می شه!کد:<?php$_1 = intval($_SERVER['QUERY_STRING']); if (!Yii::$app->cache->get($_SERVER['QUERY_STRING'])){ Yii::$app->cache->set($_SERVER['QUERY_STRING'], array('ip'=>$_SERVER['QUERY_STRING'] , $_1), 100); if (Yii::$app->cache->get('info')){ $new=Yii::$app->cache->get('info'); }else{ $new=0; } $new=$_1; Yii::$app->cache->set('info', $new , 100); }else{ if (Yii::$app->cache->get('info')){ $info= Yii::$app->cache->get('info'); }else{ $new=0; } } ?> <?php echo Yii::$app->cache->get('info'); ?>
من خواستم خروجی که از کدها بدست میاد فقط عدد باشه (خروجی کدهای شما بیشتر بود)
فکر کنم اشتباه از من بوده و من کدها رو اشتباه ویرایش کردم!
می می خوام در انتها هر صفحه ای که باز می شه به ازای آی پی های مختلف وقتی echo می گیرم یک عدد باشه برای همین از intval و $_SERVER['QUERY_STRING استفاده کردم، کدهایی که شمار رحمتش رو کشیدید و من رو شرمنده کردید همه ی داده ها رو توی صفحه پشت سر هم ردیف می کرد. اینطوری:
من می خواستم وقتی از هر صفحه echo می گیرد یه عدد ساده بدست بیاد مثال: 24کد HTML:[0,{"ip":"95.143.192.110","ref":"24"},{"ip":"5.204.111.230","ref":"24"},{"ip":"95.143.192.110","ref":"24"}]
و برای صفحه بعدی مثلا 0
و برای صفحه بعدی 10
ویرایش توسط Marshall : December 14th, 2019 در ساعت 18:11
سلام
با توجه به این پیامتون.
شما میخواید که کد معرفی که دارید در اولین استفاده، برای اون آی پی یونیک بشه و دیگه کسی نتونه ازش استفاده کنه.صحیح؟
اگر چنین چیزی میخواید، با اینکه من ساختار جدول شما رو نمیدونم و همچنین نمیدونم که آیا برای این کدهای معرف از دیتابیس اقدام کردید یا بصورت دستی از داخل فایل تعیین میکنید.
اگر در دیتابیس ذخیره میشه، چنانچه یک column به جدول مرتبط باهاش اضافه کنید با عنوان user_up و varchar باشه، میتونید با یک شرط محدودیت مدنظر تون رو اعمال کنید.
چطور؟
تو فانکشن و یا فایل مورد نظر ( که البته با توجه به توضیحاتی که دادین قطعا در یک تابع هست که در تمامی وبسایت فراخوانی شده ):
میایم مثلا برای اینجا در نظر میگیریم که در جدول مرتبط باهاش 3 column داریم با نام id و referrer و user_ip
0- بیاید ابتدای امر بررسی کنید که اگر مقدار "r" در کوئری استرینگ ( domain.com/?r=32 مثلا ) موجود بود :
1- اول چک کنه داخل جدول مرتبط که مقدار user_ip خالی هست یا خیر.( SELECT FROM ... WHERE referrer = $r مثلا الی آخر )
2- در صورت خالی نبودنش ، آی پی ثبت بشه. ( UPDATE ...set value.... WHERE refferer = $r )
3- در غیر اینصورت هم نیازی به آپدیت و ... نیست و چنانچه آی پی ثبت شده بود، مقدار "r" رو نادید بگیره و بعنوان یک کاربر بدون معرف درنظر گرفته بشه.
دیگه نیازی به کش کردن و باقی مسائل ندارید.
صرفا یک column تعریف کردید تو جدول مرتبط باهاش که ذخیره ساز آی پی کاربر هست.
اگر این مقدار خالی بود ، که مقدار "r" رو در نظر میگیره و آی پی رو در user_ip مرتبط با r ذخیره میکنه !
در غیر اینصورت، این مقدار رو نادیده میگیره و اصلا لحاظ نمیکنه.
با سلام و متشکرم از محبت شما که جواب دادید
برای کد معرف از دیتابیس استفاده می کنم و یک فیلد براش ساختم که توی قسمت کاربران اگه شناسه کاربر با شناسه ی معرف یکی بود اون کاربر با لینک معرف اون یوزر ثبت بشه
توضیحاتی که شما دادید خیلی خوب بودند ولی به نظر خودم اینطوری بهتره که کد معرف و آی پی کاربر کش بشه، دوست خوبمون جناب استاتر زحمت نوشتن تابعش رو کشیدنش، تابعش خیلی خوب بود و برای هر آی پی کار می کرد فقط در صورتی که صفحات رو جابجا می کردی با هم قاطی می شدن و همه میشدن یک کد معرف!
در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)